/*
 * CnbiSoft JavaScript Library Copyright CnbiSoft Technologies LLP
 * License Information at <http://www.CnbiSoft.com/license>
 * 
 * @author CnbiSoft Technologies LLP
 * 
 * @version CnbiSoft/3.2.3-sr2.6105
 */
(function() {
	function ba(a, c, b) {
		var d = u(c) !== void 0;
		this.paletteId = a;
		this.themeColor = c;
		this.isTheme = d;
		this._iterator = 0;
		this.defaultGaugePaletteOptions = b && b.defaultGaugePaletteOptions
				|| ma
	}
	function ua() {
	}
	function ca(a, c, b, d) {
		c = j(c, d);
		a = j(a, b);
		return !c || !a ? 1 : a / b == c / d ? b / a : Math.min(b / a, d / c)
	}
	function Ia(a, c, b, d) {
		var e, f = a && a.length || 0, h, g, i = [], k = c < 0, b = j(b, -0.5), d = j(
				d, 1.5);
		for (e = 0; e < f; e += 1)
			if (h = a[e], h.isGrid || h.isVline)
				if (g = h.value += c, k && g < b || !k && g > d)
					a.splice(e, 1), h.isGrid && i.push(h), e -= 1, f -= 1;
		return i
	}
	function va(a, c, b, d) {
		var e, f, h, g, i, k;
		b instanceof Array || (b = ma.paletteColors[0]);
		if (a && a.length > 0) {
			for (f = h = a.length - 1; f >= 0; f -= 1)
				if (e = a[f]) {
					e.minvalue = d.numberFormatter.getCleanValue(e.minvalue);
					e.maxvalue = d.numberFormatter.getCleanValue(e.maxvalue);
					if (e.minvalue === null)
						e.maxvalue !== null ? e.minvalue = e.maxvalue : f !== h
								&& a.splice(f, 1);
					if (e.label !== void 0)
						e.label = D(e.label);
					if (e.name !== void 0)
						e.name = D(e.name);
					if (e.maxvalue !== null && e.minvalue > e.maxvalue)
						g = e.minvalue, e.minvalue = e.maxvalue, e.maxvalue = g
				}
			a.sort(hb);
			if (!a[0].code)
				a[0].code = b[0];
			if (u(a[0].alpha) == void 0)
				a[0].alpha = na;
			f = 0;
			for (h = a.length - 1; f < h; f += 1) {
				g = f + 1;
				e = a[f];
				d = a[g];
				if (!d.code)
					d.code = b[g];
				if (u(d.alpha) == void 0)
					d.alpha = na;
				if (e.maxvalue === null)
					e.maxvalue = d.minvalue;
				if (e.maxvalue > d.minvalue) {
					if (e.maxvalue > d.maxvalue) {
						g = aa(e);
						g.maxvalue = e.maxvalue;
						k = g.minvalue = d.maxvalue;
						for (i = f + 2; i < h && a[i].minvalue < k; i += 1);
						a.splice(i, 0, g);
						h += 1
					}
					e.maxvalue = d.minvalue
				}
			}
			e = a[f];
			if (e.maxvalue === null)
				e.maxvalue = e.minvalue
		}
		if (!(a && a.length > 0))
			c || (c = {
				code : "CCCCCC",
				alpha : "100",
				bordercolor : "000000",
				borderalpha : "100"
			}), a = [c], this.defaultAsigned = !0;
		this.colorArr = a
	}
	var ha = CnbiSoft(["private", "modules.renderer.highcharts-widgets"]);
	if (ha !== void 0) {
		var B = ha.hcLib, E = B.BLANKSTRING, ea = B.createTrendLine, m = B.pluck, u = B.getValidValue, j = B.pluckNumber, y = B.getFirstDefinedValue, Oa = B.defaultPaletteOptions, ra = B.getFirstValue, V = B.FC_CONFIG_STRING, aa = B.extend2, fa = B.getDashStyle, da = B.hasSVG, Da = B.falseFN, Ea = B.getFirstColor, K = B.graphics.getDarkColor, S = B.graphics.getLightColor, G = B.graphics.convertColor, ka = B.graphics.parseColor, Wa = B.graphics.parseAlpha, oa = B.COLOR_TRANSPARENT, t = B.chartAPI, o = B.titleSpaceManager, I = B.placeLegendBlockBottom, s = B.placeLegendBlockRight, r = t.singleseries, q = B.COMMASTRING, R = B.ZEROSTRING, v = B.ONESTRING, D = B.parseUnsafeString, ga = B.HCstub, J = window, pa = /msie/i
				.test(navigator.userAgent)
				&& !J.opera, J = B.Highcharts, la = document, ib = la.documentMode === 8, U = Math, Aa = U.max, Xa = U.min, bb = U.abs, jb = U.atan2, wa = U.PI
				/ 180, Fa = B.regex.dropHash, Ya = B.toPrecision, Ja = B.HASHSTRING, kb = B.getColorCodeString, Pa = B.regex.hexcode, Y, U = J.seriesTypes, Ga = J.attr, Ba = la.documentElement.ontouchstart !== void 0, Qa = J.getTouchEvent, Ra = J.addEvent, Ka = J.each, Ha = J.extend, ia = J.merge, lb = J.pick, La = J.Color, sa = function(
				a) {
			return typeof a === "object"
		}, xa = function(a) {
			return typeof a === "string"
		}, T = function(a) {
			return a !== void 0 && a !== null
		}, Ma = "rgba(192,192,192," + (da ? 1.0E-6 : 0.0020) + ")", ja = pa
				&& !da ? "visible" : "", Sa = B.regex.startsRGBA, ya = B.setLineHeight, cb = B.pluckFontSize, za = B.POSITION_CENTER, Za = B.POSITION_TOP, $a = B.POSITION_BOTTOM, ta = B.POSITION_RIGHT, qa = B.POSITION_LEFT, Na = B.POSITION_MIDDLE, na = B.HUNDREDSTRING, Ta = B.PXSTRING, db = B.COMMASPACE, Z = !/CnbiSoft\.com$/i
				.test(location.hostname), Ua = function(a, c, b, d, e) {
			var f = d.chart.options.scale, h = f.minorTM, g = f.min, i = f.max, k = f.majorTM, l;
			l = f.axisPosition;
			var j = f.minorTMHeight, p = f.majorTMHeight, n = f.connectorColor, w = f.connectorThickness, H = f.minorTMColor, P = f.minorTMThickness, A = f.majorTMColor, X = f.majorTMThickness, x = f.tickMarkDistance, Ca = f.tickValueDistance, q = f.placeTicksInside, o = f.placeValuesInside, r, z = Math
					.max(p, j), e = b.g("scale").add(e), s = za, I = f.reverseScale, F = 0, O = 0, M = 0, t = 0, v = 0, N = 0, L = r = 0, u = 0, G = 0, D = 0, Q = 0, y = 0, B = 0, J = 0, R = 0, K = i
					- g, T = P / 2, U = X / 2;
			q ? (x = -x, p = -p, j = -j, o ? (z = -z, Ca = -Ca) : z = -x) : o
					&& (z = -x, Ca = -Ca);
			I && (K = -K, g = i);
			switch (l) {
				case 1 :
					F = a / K;
					t = -x;
					N = t - U;
					L = t - T;
					G = t - p;
					Q = t - j;
					B = t - z - Ca;
					break;
				case 2 :
					O = c / K;
					M = x;
					v = M + U;
					r = M + T;
					u = M + p;
					D = M + j;
					y = M + z + Ca;
					s = o ? ta : qa;
					J = a;
					break;
				case 3 :
					F = a / K;
					t = x;
					N = t + U;
					L = t + T;
					G = t + p;
					Q = t + j;
					B = t + z + Ca;
					R = c;
					break;
				case 4 :
					O = c / K, M = -x, v = M - U, r = M - T, u = M - p, D = M
							- j, y = M - z - Ca, s = o ? qa : ta
			}
			if (!d.minorTM)
				d.minorTM = [];
			if (!d.majorTM)
				d.majorTM = [];
			if (!d.tmLabel)
				d.tmLabel = [];
			e.translate(J, R);
			if (j) {
				a = 0;
				for (c = h.length; a < c; a += 1)
					l = h[a] - g, i = l * F, l *= O, p = b.crispLine(["M",
									i + r, l + L, "L", i + D, l + Q], P), d.minorTM[a] = b
							.path(p).attr({
										stroke : H,
										"stroke-linecap" : "round",
										"stroke-width" : P
									}).add(e)
			}
			a = 0;
			for (c = k.length; a < c; a += 1)
				H = k[a], l = H.value - g, h = H.displayValue, i = l * F, l *= O, j
						&& (p = b.crispLine(["M", i + v, l + N, "L", i + u,
										l + G], P), d.majorTM[a] = b.path(p)
								.attr({
											stroke : A,
											"stroke-linecap" : "round",
											"stroke-width" : X
										}).add(e)), h !== E
						&& (r = a == 0 || a == c - 1
								? f.limitValues.style
								: f.tickValues.style, L = H.labelX || 0, D = H.labelY
								|| 0, d.tmLabel[a] = b.text(h, i + y + L,
								l + B + D).attr({
									align : m(H.align, s)
								}).css(r).add(e));
			w
					&& (p = b.crispLine(["M", M, t, "L", K * F + M, K * O + t],
							X), b.path(p).attr({
								stroke : n,
								"stroke-linecap" : "round",
								"stroke-width" : w
							}).add(e));
			return e
		}, ma = {
			paletteColors : [
					["8BBA00", "F6BD0F", "FF654F", "AFD8F8", "FDB398",
							"CDC309", "B1D0D2", "FAD1B9", "B8A79E", "D7CEA5",
							"C4B3CE", "E9D3BE", "EFE9AD", "CEA7A2", "B2D9BA"],
					["8BBA00", "F6BD0F", "FF654F", "AFD8F8", "FDB398",
							"CDC309", "B1D0D2", "FAD1B9", "B8A79E", "D7CEA5",
							"C4B3CE", "E9D3BE", "EFE9AD", "CEA7A2", "B2D9BA"],
					["8BBA00", "F6BD0F", "FF654F", "AFD8F8", "FDB398",
							"CDC309", "B1D0D2", "FAD1B9", "B8A79E", "D7CEA5",
							"C4B3CE", "E9D3BE", "EFE9AD", "CEA7A2", "B2D9BA"],
					["8BBA00", "F6BD0F", "FF654F", "AFD8F8", "FDB398",
							"CDC309", "B1D0D2", "FAD1B9", "B8A79E", "D7CEA5",
							"C4B3CE", "E9D3BE", "EFE9AD", "CEA7A2", "B2D9BA"],
					["8BBA00", "F6BD0F", "FF654F", "AFD8F8", "FDB398",
							"CDC309", "B1D0D2", "FAD1B9", "B8A79E", "D7CEA5",
							"C4B3CE", "E9D3BE", "EFE9AD", "CEA7A2", "B2D9BA"]],
			bgColor : ["CBCBCB,E9E9E9", "CFD4BE,F3F5DD", "C5DADD,EDFBFE",
					"A86402,FDC16D", "FF7CA0,FFD1DD"],
			bgAngle : [270, 270, 270, 270, 270],
			bgRatio : ["0,100", "0,100", "0,100", "0,100", "0,100"],
			bgAlpha : ["50,50", "60,50", "40,20", "20,10", "30,30"],
			toolTipBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF"],
			toolTipBorderColor : ["545454", "545454", "415D6F", "845001",
					"68001B"],
			baseFontColor : ["555555", "60634E", "025B6A", "A15E01", "68001B"],
			tickColor : ["333333", "60634E", "025B6A", "A15E01", "68001B"],
			trendDarkColor : ["333333", "60634E", "025B6A", "A15E01", "68001B"],
			trendLightColor : ["f1f1f1", "F3F5DD", "EDFBFE", "FFF5E8", "FFD1DD"],
			pointerBorderColor : ["545454", "60634E", "415D6F", "845001",
					"68001B"],
			pointerBgColor : ["545454", "60634E", "415D6F", "845001", "68001B"],
			canvasBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF"],
			canvasBgAngle : [0, 0, 0, 0, 0],
			canvasBgAlpha : ["100", "100", "100", "100", "100"],
			canvasBgRatio : ["", "", "", "", ""],
			canvasBorderColor : ["545454", "545454", "415D6F", "845001",
					"68001B"],
			canvasBorderAlpha : [100, 100, 100, 90, 100],
			altHGridColor : ["EEEEEE", "D8DCC5", "99C4CD", "DEC49C", "FEC1D0"],
			altHGridAlpha : [50, 35, 10, 20, 15],
			altVGridColor : ["767575", "D8DCC5", "99C4CD", "DEC49C", "FEC1D0"],
			altVGridAlpha : [10, 20, 10, 15, 10],
			borderColor : ["767575", "545454", "415D6F", "845001", "68001B"],
			borderAlpha : [50, 50, 50, 50, 50],
			legendBgColor : ["ffffff", "ffffff", "ffffff", "ffffff", "ffffff"],
			legendBorderColor : ["545454", "545454", "415D6F", "845001",
					"D55979"],
			plotFillColor : ["767575", "D8DCC5", "99C4CD", "DEC49C", "FEC1D0"],
			plotBorderColor : ["999999", "8A8A8A", "6BA9B6", "C1934D", "FC819F"],
			msgLogColor : ["717170", "7B7D6D", "92CDD6", "965B01", "68001B"],
			TrendLightShadeOffset : 30
		};
		ba.prototype = {
			getColor : function() {
				var a = this.paletteId, c = this.defaultGaugePaletteOptions.paletteColors[a][this._iterator];
				this._iterator += 1;
				if (this._iterator == this.defaultGaugePaletteOptions.paletteColors[a].length
						- 1)
					this._iterator = 0;
				return c
			},
			get2DBgColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 35) + q + S(c, 10)
						: this.defaultGaugePaletteOptions.bgColor[a]
			},
			get2DBgAlpha : function() {
				return this.defaultGaugePaletteOptions.bgAlpha[this.paletteId]
			},
			get2DBgAngle : function() {
				return this.defaultGaugePaletteOptions.bgAngle[this.paletteId]
			},
			get2DBgRatio : function() {
				return this.defaultGaugePaletteOptions.bgRatio[this.paletteId]
			},
			getTickColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 90)
						: this.defaultGaugePaletteOptions.tickColor[a]
			},
			getTrendDarkColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 90)
						: this.defaultGaugePaletteOptions.trendDarkColor[a]
			},
			getTrendLightColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(
								c,
								this.defaultGaugePaletteOptions.TrendLightShadeOffset)
						: this.defaultGaugePaletteOptions.trendLightColor[a]
			},
			get2DCanvasBgColor : function() {
				return this.defaultGaugePaletteOptions.canvasBgColor[this.paletteId]
			},
			get2DCanvasBgAngle : function() {
				return this.defaultGaugePaletteOptions.canvasBgAngle[this.paletteId]
			},
			get2DCanvasBgAlpha : function() {
				return this.defaultGaugePaletteOptions.canvasBgAlpha[this.paletteId]
			},
			get2DCanvasBgRatio : function() {
				return this.defaultGaugePaletteOptions.canvasBgRatio[this.paletteId]
			},
			get2DCanvasBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 80)
						: this.defaultGaugePaletteOptions.canvasBorderColor[a]
			},
			get2DCanvasBorderAlpha : function() {
				return this.defaultGaugePaletteOptions.canvasBorderAlpha[this.paletteId]
			},
			get2DAltHGridColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 20)
						: this.defaultGaugePaletteOptions.altHGridColor[a]
			},
			get2DAltHGridAlpha : function() {
				return this.defaultGaugePaletteOptions.altHGridAlpha[this.paletteId]
			},
			get2DAltVGridColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 80)
						: this.defaultGaugePaletteOptions.altVGridColor[a]
			},
			get2DAltVGridAlpha : function() {
				return this.defaultGaugePaletteOptions.altVGridAlpha[this.paletteId]
			},
			get2DToolTipBgColor : function() {
				return this.defaultGaugePaletteOptions.toolTipBgColor[this.paletteId]
			},
			get2DToolTipBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 80)
						: this.defaultGaugePaletteOptions.toolTipBorderColor[a]
			},
			get2DBaseFontColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? c
						: this.defaultGaugePaletteOptions.baseFontColor[a]
			},
			get2DBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 60)
						: this.defaultGaugePaletteOptions.borderColor[a]
			},
			get2DBorderAlpha : function() {
				return this.defaultGaugePaletteOptions.borderAlpha[this.paletteId]
			},
			get2DLegendBgColor : function() {
				return this.defaultGaugePaletteOptions.legendBgColor[this.paletteId]
			},
			get2DLegendBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 80)
						: this.defaultGaugePaletteOptions.legendBorderColor[a]
			},
			get2DPlotGradientColor : function() {
				return this.defaultGaugePaletteOptions.plotGradientColor[this.paletteId]
			},
			get2DPlotBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 85)
						: this.defaultGaugePaletteOptions.plotBorderColor[a]
			},
			get2DPlotFillColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 85)
						: this.defaultGaugePaletteOptions.plotFillColor[a]
			},
			get2DMsgLogColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 80)
						: this.defaultGaugePaletteOptions.msgLogColor[a]
			},
			getDialColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 95) + ",FFFFFF," + K(c, 95)
						: this.defaultGaugePaletteOptions.dialColor[a]
			},
			getDialBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 95) + ",FFFFFF," + K(c, 95)
						: this.defaultGaugePaletteOptions.dialBorderColor[a]
			},
			getPivotColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 95) + ",FFFFFF," + S(c, 95)
						: this.defaultGaugePaletteOptions.pivotColor[a]
			},
			getPivotBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 95) + ",FFFFFF," + K(c, 95)
						: this.defaultGaugePaletteOptions.pivotBorderColor[a]
			},
			getPointerBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 75)
						: this.defaultGaugePaletteOptions.pointerBorderColor[a]
			},
			getPointerBgColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 75)
						: this.defaultGaugePaletteOptions.pointerBgColor[a]
			},
			getThmBorderColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? K(c, 90)
						: this.defaultGaugePaletteOptions.thmBorderColor[a]
			},
			getThmFillColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 55)
						: this.defaultGaugePaletteOptions.thmFillColor[a]
			},
			getCylFillColor : function() {
				var a = this.paletteId, c = this.themeColor;
				return this.isTheme
						? S(c, 55)
						: this.defaultGaugePaletteOptions.cylFillColor[a]
			},
			getPeriodColor : function() {
				return this.isTheme
						? S(this.themeColor, 10)
						: this.defaultGaugePaletteOptions.periodColor[this.paletteId]
			},
			getWinColor : function() {
				return this.defaultGaugePaletteOptions.winColor[this.paletteId]
			},
			getLossColor : function() {
				return this.defaultGaugePaletteOptions.lossColor[this.paletteId]
			},
			getDrawColor : function() {
				return this.defaultGaugePaletteOptions.drawColor[this.paletteId]
			},
			getScoreLessColor : function() {
				return this.defaultGaugePaletteOptions.scorelessColor[this.paletteId]
			},
			reset : function() {
				this._iterator = 0
			},
			parseColorMix : function(a, c) {
				var b = [], c = c.replace(/\s/g, E), c = c.toLowerCase();
				if (c == "" || c == null || c == void 0)
					b = [a];
				else {
					var d, e, f = c.split(",");
					for (d = 0; d < f.length; d++)
						f[d] = f[d].replace("{", ""), f[d] = f[d].replace("}",
								""), f[d] == "color"
								? b.push(a)
								: f[d].substr(0, 5) == "light"
										? (e = f[d].indexOf("-"), e = e == -1
												? 1
												: f[d].substr(e + 1,
														f[d].length - e), e = 100
												- e, b.push(S(a, e)))
										: f[d].substr(0, 4) == "dark"
												? (e = f[d].indexOf("-"), e = e == -1
														? 1
														: f[d]
																.substr(
																		e + 1,
																		f[d].length
																				- e), e = 100
														- e, b.push(K(a, e)))
												: b.push(f[d])
				}
				return b
			},
			parseAlphaList : function(a, c) {
				var b = [], d = [], b = a.split(","), e, f = 100, h;
				for (h = 0; h < c; h++)
					e = j(b[h]), T(e) && (f = e), d[h] = f;
				return d.join()
			},
			parseRatioList : function(a, c) {
				var b = [], d = [], b = a.split(","), e = 0, f, h;
				for (h = 0; h < c; h++)
					f = b[h], f = isNaN(f) || f == void 0 ? 0 : Math
							.abs(Number(f)), f = f > 100 ? 100 : f, d[h] = f, e += f;
				e = e > 100 ? 100 : e;
				if (b.length < c)
					for (h = b.length; h < c; h++)
						d[h] = (100 - e) / (c - b.length);
				d[-1] = 0;
				return d.join()
			}
		};
		ba.prototype.constructor = ba;
		Y = J.setOptions({}).plotOptions;
		ua.prototype = {
			numDecimals : function(a) {
				a = Ya(a, 10);
				a = Math.abs(a);
				a = Ya(a - Math.floor(a), 10);
				a = String(a).length - 2;
				return a < 0 ? 0 : a
			},
			toRadians : function(a) {
				return a / 180 * Math.PI
			},
			toDegrees : function(a) {
				return a / Math.PI * 180
			},
			flashToStandardAngle : function(a) {
				return -1 * a
			},
			standardToFlashAngle : function(a) {
				return -1 * a
			},
			flash180ToStandardAngle : function(a) {
				var c = 360 - ((a %= 360) < 0 ? a + 360 : a);
				return c == 360 ? 0 : c
			},
			getAngularPoint : function(a, c, b, d) {
				d *= Math.PI / 180;
				return {
					x : a + b * Math.cos(d),
					y : c - b * Math.sin(d)
				}
			},
			remainderOf : function(a, c) {
				return ab(a % c)
			},
			boundAngle : function(a) {
				return a >= 0 ? remainderOf(a, 360) : 360
						- remainderOf(Math.abs(a), 360)
			},
			toNearestTwip : function(a) {
				var c = Math.round(Math.abs(a) * 100), b = Math.floor(c / 5);
				return (a < 0 ? -1 : 1)
						* ((Number(String(c - b * 5)) > 2 ? b * 5 + 5 : b * 5) / 100)
			},
			roundUp : function(a, c) {
				var b = Math.pow(10, c == void 0 ? 2 : c);
				a *= b;
				a = Math.round(Number(String(a)));
				a /= b;
				return a
			}
		};
		ua.prototype.constructor = ua;
		window.MathExt = ua;
		var eb = function(a, c, b, d, e) {
			var f = a[V].smartLabel, h = c.chart, g = a.chart, i, k, l = 0, c = a.title, C = a.subtitle, p = c.text, n = C.text, e = j(
					h.captionpadding, e, 2), w = 0, H = 0, P = l = 0, A = j(
					h.captiononright, 0), X = u(h.captionposition, "top")
					.toLowerCase(), x = 0, h = {
				left : 0,
				right : 0
			};
			if (p !== E)
				i = c.style, w = j(parseInt(i.fontHeight, 10), parseInt(
								i.lineHeight, 10), 12), P = j(parseInt(
								i.fontSize, 10), 10);
			if (n !== E)
				k = C.style, H = j(parseInt(k.fontHeight, 10), parseInt(
								k.lineHeight, 10), 12), l = j(parseInt(
								k.fontSize, 10), 10);
			if (w > 0 || H > 0) {
				f.setStyle(i);
				i = f.getSmartText(c.text, b, d);
				if (i.width > 0)
					i.width += 2, x = i.height;
				f.setStyle(k);
				f = f.getSmartText(C.text, b, d - x);
				f.width > 0 && (f.width += 2);
				switch (X) {
					case "middle" :
						c.y = d / 2 + (P - (l > 0 ? l + 0 : 0)) / 2;
						c.y = d / 2 - f.height / 2;
						C.y = c.y + 0 + l;
						break;
					case "bottom" :
						C.y = d - g.marginBottom - g.marginTop;
						c.y = C.y - (f.height > 0 ? f.height + 0 : 0);
						break;
					default :
						c.y = P - 0, C.y = i.height + l
				}
				l = Math.max(i.width, f.width);
				a.title.text = i.text;
				a.subtitle.text = f.text;
				l > 0 && (l += e);
				a = Math.min(l, b);
				A
						? (c.align = C.align = ta, h.right = a, c.x = i.width
								- l + e, C.x = f.width - l + e)
						: (c.align = C.align = qa, h.left = a, c.x = l
								- i.width - e, C.x = l - f.width - e)
			}
			return h
		}, fb = function(a, c, b, d, e) {
			var f = a.chart, h = c.chart, c = a.title, g = j(h.captionpadding,
					2), h = j(h.captiononright, 0), a = a.subtitle;
			f.spacingRight = f.spacingLeft = 0;
			T(d) || (d = 0);
			T(e) || (e = 0);
			h
					? (b -= f.marginRight, a.align = c.align = qa, c.x = a.x = b
							+ g + e + 2)
					: (b -= f.marginLeft, a.align = c.align = ta, c.x = a.x = f.spacingLeft
							- b - g - d - 2)
		}, gb = function(a, c, b, d, e) {
			this.userMin = a;
			this.userMax = c;
			this.numMajorTM = j(d.majorTMNumber, -1);
			this.numMinorTM = j(d.minorTMNumber, 5);
			this.adjustTM = d.adjustTM;
			this.tickValueStep = j(d.tickValueStep, 1);
			this.showLimits = j(d.showLimits, 1);
			this.showTickValues = j(d.showTickValues, 1);
			this.nf = e;
			this.stopMaxAtZero = b;
			this.setMinAsZero = !d.setAdaptiveMin;
			this.upperLimitDisplay = d.upperLimitDisplay;
			this.lowerLimitDisplay = d.lowerLimitDisplay;
			this.userMaxGiven = this.userMax == null || this.userMax == void 0
					|| this.userMax == "" ? !1 : !0;
			this.userMinGiven = this.userMin == null || this.userMin == void 0
					|| this.userMin == "" ? !1 : !0;
			this.majorTM = [];
			this.minorTM = [];
			this.MathExt = new ua
		};
		gb.prototype = {
			setAxisCoords : function(a, c) {
				this.startAxisPos = a;
				this.endAxisPos = c
			},
			calculateLimits : function(a, c) {
				var b = !0, d = !0;
				isNaN(a) && (a = 0.9, d = !1);
				isNaN(c) && (c = 0, b = !1);
				a == c && a == 0 && (a = 0.9);
				var e = Math.max(Math.floor(Math.log(Math.abs(c)) / Math.LN10),
						Math.floor(Math.log(Math.abs(a)) / Math.LN10)), f = Math
						.pow(10, e);
				Math.abs(a) / f < 2 && Math.abs(c) / f < 2
						&& (e--, f = Math.pow(10, e));
				e = Math.pow(10, Math.floor(Math.log(a - c) / Math.LN10));
				a - c > 0 && f / e >= 10 && (f = e);
				var e = (Math.floor(a / f) + 1) * f, h;
				c < 0
						? h = -1 * (Math.floor(Math.abs(c / f)) + 1) * f
						: this.setMinAsZero ? h = 0 : (h = Math.floor(Math
								.abs(c / f)
								- 1)
								* f, h = h < 0 ? 0 : h);
				this.stopMaxAtZero && a <= 0 && (e = 0);
				this.max = this.userMaxGiven == !1 || this.userMaxGiven == !0
						&& Number(this.userMax) < a && d
						? e
						: Number(this.userMax);
				this.min = this.userMinGiven == !1 || this.userMinGiven == !0
						&& Number(this.userMin) > c && b
						? h
						: Number(this.userMin);
				if (this.min > this.max)
					if (this.min == Number(this.userMin)
							&& this.max == Number(this.userMax))
						b = this.min, this.min = this.max, this.max = b;
					else if (this.min == Number(this.userMin))
						this.max = this.min + 1;
					else {
						if (this.max == Number(this.userMax))
							this.min = this.max - 1
					}
				else if (this.min == this.max)
					this.max = this.min + 1;
				this.range = Math.abs(this.max - this.min);
				this.interval = f;
				this.calcTickInterval()
			},
			calcTickInterval : function() {
				if (this.numMajorTM != -1 && this.numMajorTM < 2)
					this.numMajorTM = 2;
				if (this.userMinGiven == !1 && this.userMaxGiven == !1
						&& this.numMajorTM != -1) {
					this.numMajorTM = this.numMajorTM == -1
							? 5
							: this.numMajorTM;
					var a = this.getDivisibleRange(this.min, this.max,
							this.numMajorTM, this.interval, !0), c = a
							- this.range;
					this.range = a;
					this.max > 0 ? this.max += c : this.min -= c
				} else if (this.numMajorTM = this.numMajorTM == -1
						? 5
						: this.numMajorTM, this.adjustTM == !0) {
					for (var a = 0, c = 1, b;;) {
						b = this.numMajorTM + a * c;
						b = b == 0 ? 1 : b;
						if (this.isRangeDivisible(this.range, b, this.interval))
							break;
						a = c == -1 || a > this.numMajorTM ? ++a : a;
						if (a > 25) {
							b = this.numMajorTM;
							break
						}
						c = a <= this.numMajorTM ? c * -1 : 1
					}
					this.numMajorTM = b > 1 ? b : this.numMajorTM
				}
				this.majorTickInt = (this.max - this.min)
						/ (this.numMajorTM - 1)
			},
			isRangeDivisible : function(a, c, b) {
				return this.MathExt.numDecimals(a / (c - 1)) > this.MathExt
						.numDecimals(b) ? !1 : !0
			},
			getDivisibleRange : function(a, c, b, d, e) {
				if (b < 3)
					return this.range;
				a = Math.abs(c - a);
				c = a / (b - 1);
				this.isRangeDivisible(a, b, d)
						|| (e && Number(c) / Number(d) < (d > 1 ? 2 : 0.5)
								&& (d /= 10), c = (Math.floor(c / d) + 1) * d, a = c
								* (b - 1));
				return a
			},
			calculateTicks : function() {
				this.majorTM = [];
				this.minorTM = [];
				for (var a = 0, c, b, d = this.numMajorTM, e = this.numMinorTM, f = this.nf, h = this.tickValueStep, g = D(this.lowerLimitDisplay), i = D(this.upperLimitDisplay), k = this.majorTickInt, l = this.min, C = this.showTickValues, p = !1, n = j(
						this.showLimits, C); a < d; a += 1)
					c = Ya(Number(l + k * a), 10), b = f.scale(c), p = !1, a
							% h !== 0
							&& a !== d - 1 ? b = E : a == 0 || a == d - 1 ? n
							? a == 0 && g ? (b = g, p = !0) : a == d - 1 && i
									&& (b = i, p = !0)
							: b = E : C || (b = E), this.majorTM.push({
								displayValue : b,
								isString : p,
								value : c
							});
				b = k / (e + 1);
				for (a = 0; a < d - 1; a += 1)
					for (c = 1; c <= e; c += 1)
						this.minorTM.push(this.majorTM[a].value + b * c)
			},
			returnDataAsTick : function(a, c) {
				var b = {};
				b.value = a;
				b.displayValue = this.nf.dataLabels(a);
				b.showValue = c;
				return b
			},
			getMax : function() {
				return this.max
			},
			getMin : function() {
				return this.min
			},
			getMajorTM : function() {
				return this.majorTM
			},
			getMinorTM : function() {
				return this.minorTM
			},
			getAxisPosition : function(a) {
				if (this.startAxisPos == void 0 || this.endAxisPos == void 0)
					throw Error("Cannot calculate position, as axis co-ordinates have not been defined. Please use setAxisCoords() method to define the same.");
				return this.startAxisPos
						+ (this.endAxisPos - this.startAxisPos)
						/ (this.max - this.min) * (a - this.min)
			},
			getValueFromPosition : function(a) {
				if (this.startAxisPos == void 0 || this.endAxisPos == void 0)
					throw Error("Cannot calculate value, as axis co-ordinates have not been defined. Please use setAxisCoords() method to define the same.");
				var c, b;
				c = this.max - this.min;
				b = a - this.startAxisPos;
				return b / (b + (this.endAxisPos - a)) * c + this.min
			}
		};
		t("gaugebase", {
			creditLabel : Z,
			defaultGaugePaletteOptions : ma,
			multiValueGauge : !1,
			decimals : 2,
			formatnumberscale : 0,
			drawAnnotations : !0,
			useScaleRecursively : !0,
			init : function(a, c, b) {
				var d = b.jsVars;
				this.rtLatestSeriesData = d && d._rtLastUpdatedData
						? d._rtLastUpdatedData
						: null;
				return t.base.init.apply(this, arguments)
			},
			chart : function(a, c) {
				var b = this.name, d = this.dataObj || {}, e, f = this.defaultSeriesType, h, g = d.chart
						|| {}, i, k;
				e = ga(d, a, c, this);
				k = e.chart;
				e.labels.smartLabel = e[V].smartLabel = this.smartLabel;
				this.width = a;
				this.height = c;
				h = e.plotOptions;
				k.useRoundEdges = g.useroundedges == 1;
				k.defaultSeriesType = f;
				f = g.palette > 0 && g.palette < 6 ? g.palette : j(
						this.paletteIndex, 1);
				f -= 1;
				k.paletteIndex = f;
				var l = this.colorM = new ba(f, g.palettethemecolor, this);
				i = aa({}, d.colorrange);
				this.colorRangeGetter = new va(i.color, void 0,
						this.defaultGaugePaletteOptions.paletteColors[f], this);
				k.events.click = e.plotOptions.series.point.events.click = this.linkClickFN;
				if (m(g.clickurl) !== void 0)
					k.link = g.clickurl, k.style.cursor = "pointer", e.plotOptions.series.point.events.click = function() {
						k.events.click.call({
									link : g.clickurl
								})
					};
				var C = m(g.basefont, "Verdana"), p = cb(g.basefontsize, 10), n = m(
						g.basefontcolor, l.get2DBaseFontColor());
				i = m(g.outcnvbasefont, C);
				var w = cb(g.outcnvbasefontsize, p), H = w + Ta, P = m(
						g.outcnvbasefontcolor, n).replace(/^#?([a-f0-9]+)/ig,
						"#$1"), A, X;
				p += Ta;
				n = n.replace(/^#?([a-f0-9]+)/ig, "#$1");
				this.trendStyle = this.outCanvasStyle = {
					fontFamily : i,
					color : P,
					fontSize : H
				};
				A = ya(this.trendStyle);
				this.inCanvasStyle = {
					fontFamily : C,
					fontSize : p,
					color : n
				};
				X = ya(this.inCanvasStyle);
				e.legend.itemStyle = {
					fontFamily : i,
					fontSize : H,
					lineHeight : A,
					color : P
				};
				h.series.dataLabels.style = {
					fontFamily : C,
					fontSize : p,
					lineHeight : X,
					color : n
				};
				h.series.dataLabels.color = h.series.dataLabels.style.color;
				if (this.isDataLabelBold)
					h.series.dataLabels.style.fontWeight = "bold", delete h.series.dataLabels.style.lineHeight, ya(h.series.dataLabels.style);
				e.tooltip.style = {
					fontFamily : C,
					fontSize : p,
					lineHeight : X,
					color : n
				};
				e.title.style = {
					fontFamily : i,
					color : P,
					fontSize : w + 3 + Ta,
					fontWeight : "bold"
				};
				ya(e.title.style);
				e.subtitle.style = {
					fontFamily : i,
					color : P,
					fontSize : w + j(this.subTitleFontSizeExtender, 1) + Ta,
					fontWeight : u(this.subTitleFontWeight, "bold")
				};
				ya(e.subtitle.style);
				e.chart.trendPointStyle = {
					style : this.trendStyle
				};
				e.orphanStyles = {
					defaultStyle : {
						style : aa({}, this.inCanvasStyle)
					}
				};
				e.chart.colorRangeStyle = {
					style : {
						fontFamily : C,
						fontSize : p,
						lineHeight : X,
						color : n
					}
				};
				ya(e.chart.colorRangeStyle);
				k.origW = h = j(g.origw, a);
				k.origH = C = j(g.origh, c);
				h = (k.autoScale = p = j(g.autoscale, 1)) ? ca(h, C, a, c) : 1;
				this.scaleFactor = k.scaleFactor = h;
				this.createGaugeAxis && this.createGaugeAxis(d, e, {
							fontFamily : i,
							fontSize : H,
							lineHeight : A,
							color : P
						});
				this.parseStyles(e);
				delete e.xAxis.labels.style.backgroundColor;
				delete e.xAxis.labels.style.borderColor;
				delete e.yAxis[0].labels.style.backgroundColor;
				delete e.yAxis[0].labels.style.borderColor;
				delete e.yAxis[1].labels.style.backgroundColor;
				delete e.yAxis[1].labels.style.borderColor;
				this.showTooltip = j(g.showtooltip, this.showTooltip, 1);
				this.tooltipSepChar = m(g.tooltipsepchar, db);
				this.showValues = j(g.showvalues, g.showvalue, this.showValues,
						1);
				this.seriesNameInToolTip = j(g.seriesnameintooltip, 1);
				if (!this.showTooltip)
					e.tooltip.enabled = !1;
				e.plotOptions.series.connectNullData = j(g.connectnulldata, 0);
				k.backgroundColor = {
					FCcolor : {
						color : m(g.bgcolor, l.get2DBgColor()),
						alpha : m(g.bgalpha, l.get2DBgAlpha()),
						angle : m(g.bgangle, l.get2DBgAngle()),
						ratio : m(g.bgratio, l.get2DBgRatio())
					}
				};
				i = j(g.showborder, 1);
				k.borderWidth = i ? j(g.borderthickness, 1) : 0;
				k.borderColor = G(m(g.bordercolor, l.get2DBorderColor()), m(
								g.borderalpha, l.get2DBorderAlpha()));
				k.plotBackgroundColor = k.plotBorderColor = oa;
				k.plotBorderWidth = 0;
				k.plotShadow = 0;
				k.bgSWF = m(g.bgimage, g.bgswf);
				k.bgSWFAlpha = j(g.bgimagealpha, g.bgswfalpha, 100);
				i = m(g.bgimagedisplaymode, "none").toLowerCase();
				H = u(g.bgimagevalign, E).toLowerCase();
				P = u(g.bgimagehalign, E).toLowerCase();
				i == "tile" || i == "fill" || i == "fit" ? (H != Za && H != Na
						&& H != $a && (H = Na), P != qa && P != Na && P != ta
						&& (P = Na)) : (H != Za && H != Na && H != $a
						&& (H = Za), P != qa && P != Na && P != ta && (P = qa));
				k.bgImageDisplayMode = i;
				k.bgImageVAlign = H;
				k.bgImageHAlign = P;
				k.bgImageScale = j(g.bgimagescale, 100);
				k.logoURL = u(g.logourl);
				k.logoPosition = m(g.logoposition, "tl").toLowerCase();
				k.logoAlpha = j(g.logoalpha, 100);
				k.logoLink = u(g.logolink);
				k.logoScale = j(g.logoscale, 100);
				k.logoLeftMargin = j(g.logoleftmargin, 0);
				k.logoTopMargin = j(g.logotopmargin, 0);
				k.annRenderDelay = u(g.annrenderdelay);
				i = e.tooltip.style;
				e.tooltip.backgroundColor = G(m(i.backgroundColor,
								g.tooltipbgcolor, g.hovercapbgcolor,
								g.hovercapbg, l.get2DToolTipBgColor()), m(
								g.tooltipbgalpha, 100));
				e.tooltip.borderColor = G(m(i.borderColor,
								g.tooltipbordercolor, g.hovercapbordercolor,
								g.hovercapborder, l.get2DToolTipBorderColor()),
						m(g.tooltipborderalpha, 100));
				e.tooltip.shadow = g.showtooltipshadow == v ? {
					enabled : !0,
					opacity : j(Aa(g.tooltipbgalpha, g.tooltipborderalpha), 100)
							/ 100
				}
						: !1;
				e.tooltip.borderWidth = j(g.tooltipborderthickness, 1);
				if (g.tooltipborderradius)
					e.tooltip.borderRadius = j(g.tooltipborderradius, 1);
				e.tooltip.style.padding = j(g.tooltippadding,
						this.tooltippadding, 2);
				if (g.tooltipcolor)
					i.color = Ea(g.tooltipcolor);
				i.backgroundColor = void 0;
				i.borderColor = void 0;
				i.border = void 0;
				k.rotateValues = j(g.rotatevalues, 0);
				k.placeValuesInside = j(g.placevaluesinside, 0);
				k.valuePosition = g.valueposition;
				k.valuePadding = j(g.valuepadding, 4);
				e.plotOptions.series.shadow = j(g.showshadow,
						g.showcolumnshadow, this.defaultPlotShadow,
						Oa.showShadow[f]);
				if (k.useRoundEdges)
					e.plotOptions.series.shadow = j(g.showshadow,
							g.showcolumnshadow, 1), e.plotOptions.series.borderRadius = 1, e.tooltip.borderRadius = 2;
				e.title.text = D(g.caption);
				e.subtitle.text = D(g.subcaption);
				if (g.showtooltip == R)
					e.tooltip.enabled = !1;
				f = j(g.plotspacepercent, 20);
				if (f > 80 || f < 0)
					f = 20;
				this.plotSpacePercent = e.plotOptions.series.groupPadding = f
						/ 200;
				this.parseExportOptions(e);
				k.dataStreamURL = m(g.datastreamurl, "");
				k.refreshInterval = j(g.refreshinterval, 1);
				k.dataStamp = g.datastamp;
				f = j(g.showgaugeborder, 1);
				k.gaugeBorderColor = m(g.gaugebordercolor,
						this.gaugeBorderColor, "333333");
				k.gaugeBorderThickness = f ? j(g.gaugeborderthickness,
						this.gaugeBorderThickness, 2) : 0;
				k.gaugeBorderAlpha = m(g.gaugeborderalpha, na);
				k.gaugeFillColor = m(g.gaugefillcolor, g.ledbgcolor, "000000");
				k.useSameFillColor = j(g.usesamefillcolor, 0);
				k.useSameFillBgColor = j(g.usesamefillbgcolor,
						k.useSameFillColor);
				k.colorRangeFillMix = y(g.colorrangefillmix, g.gaugefillmix,
						this.colorRangeFillMix,
						"{light-10},{dark-10},{light-10},{dark-10}");
				k.colorRangeFillRatio = y(g.colorrangefillratio,
						g.gaugefillratio, this.colorRangeFillRatio,
						g.gaugefillratio, "0,10,80,10");
				k.showColorRangeBorder = j(g.showcolorrangeborder,
						g.showgaugeborder, this.showColorRangeBorder, 0);
				k.colorRangeBorderColor = m(g.colorrangebordercolor,
						g.gaugebordercolor, "{dark-20}");
				k.colorRangeBorderThickness = f
						? j(g.colorrangeborderthickness,
								g.gaugeborderthickness, 1)
						: 0;
				k.colorRangeBorderAlpha = j(g.colorrangeborderalpha,
						g.gaugeborderalpha, 100);
				k.roundRadius = j(g.roundradius, g.gaugeroundradius, 0);
				k.showShadow = j(g.showshadow, 1);
				k.gaugeType = j(g.gaugetype, this.gaugeType, 1);
				this.preSeriesAddition && this.preSeriesAddition(e, d, a, c);
				this.series(d, e, b, a, c);
				this.postSeriesAddition && this.postSeriesAddition(e, d, a, c);
				this.configureAxis && this.configureAxis(e, d);
				this.spaceManager && this.spaceManager(e, d, a, c);
				this.updateSnapPoints && this.updateSnapPoints(e);
				this.latestDataUpdater && this.latestDataUpdater(e, d, a, c);
				window.console && window.console.log
						&& window.FC_DEV_ENVIRONMENT && console.log(e);
				return e
			},
			latestDataUpdater : function(a) {
				var c = this.chartInstance, a = (a = a.series && a.series)
						&& a[0] && a[0].data, b, d, e;
				if ((c = c && c.jsVars && c.jsVars._rtLastUpdatedData) && a) {
					b = 0;
					for (d = c.values && c.values.length; b < d; b += 1)
						if (e = a[b])
							e.y = c.values[b], e.displayValue = c.labels[b], e.toolText = c.toolTexts[b]
				}
			},
			styleApplicationDefinition_font : function(a, c, b) {
				var d, e = !1, f, h, g, i = this.styleMapForFont;
				switch (c) {
					case "caption" :
						a = a.title;
						break;
					case "datalabels" :
						a = a.plotOptions.series.dataLabels;
						break;
					case "value" :
						a = a.plotOptions.series.dataLabels;
						break;
					case "datavalues" :
						a = a.plotOptions.series.dataLabels;
						e = !0;
						break;
					case "subcaption" :
						a = a.subtitle;
						break;
					case "tooltip" :
						a = a.tooltip;
						break;
					case "trendvalues" :
						a = a.chart.trendPointStyle;
						break;
					case "xaxisname" :
						a = a.xAxis.title;
						break;
					case "vlinelabels" :
						a = {
							style : a[V].divlineStyle
						};
						break;
					case "gaugelabels" :
						a = a.chart.colorRangeStyle;
						break;
					case "tickvalues" :
						a = a.scale.tickValues;
						break;
					case "limitvalues" :
						a = a.scale.limitValues;
						break;
					case "openvalue" :
						a = a.chart.openValue;
						break;
					case "closevalue" :
						a = a.chart.closeValue;
						break;
					case "highlowvalue" :
						a = a.chart.highLowValue;
						break;
					case "legend" :
						a = {
							style : a.legend.itemStyle
						};
						break;
					default :
						a.orphanStyles[c] = a = {
							text : "",
							style : {}
						}
				}
				if (typeof a === "object")
					if (a instanceof Array) {
						f = 0;
						for (h = a.length; f < h; f += 1) {
							g = a[f];
							for (d in b)
								if (c = d.toLowerCase(), typeof i[c] === "function")
									i[c](b[d], g, e);
							ya(g.style)
						}
					} else {
						for (d in b)
							if (c = d.toLowerCase(), typeof i[c] === "function")
								i[c](b[d], a, e);
						ya(a.style)
					}
			},
			createGaugeAxis : function(a, c, b) {
				var a = a.chart, d = this.colorM, e = this.numberFormatter, f = this.isHorizontal
						? j(a.ticksbelowgauge, a.ticksbelowgraph,
								this.ticksbelowgauge, 1) ? 3 : 1
						: j(a.ticksonright, this.ticksOnRight, 1) ? 2 : 4, d = m(
						a.majortmcolor, d.getTickColor()), h = j(
						a.majortmalpha, 100), g = j(j(a.majortmheight)
								* this.scaleFactor, this.majorTMHeight, 6), i = j(
						a.tickvaluestep, a.tickvaluesstep, 1), k = j(
						a.showtickmarks, 1), l = k ? j(a.connecttickmarks,
						this.connectTickMarks, 1) : 0, C = j(a.showtickvalues,
						k), p = j(a.majortmthickness, 1), n = j(e
						.getCleanValue(a.upperlimit)), e = j(e
						.getCleanValue(a.lowerlimit)), w = j(a.reversescale, 0) == 1;
				this.isHorizontal || (w = !w);
				i = i < 1 ? 1 : i;
				c.scale = {
					min : null,
					max : null,
					axisPosition : f,
					showTickMarks : k,
					showTickValues : C,
					showLimits : j(a.showlimits, C),
					adjustTM : Boolean(j(a.adjusttm, 1)),
					majorTMNumber : j(a.majortmnumber, -1),
					majorTMColor : G(d, h),
					majorTMHeight : k ? g : 0,
					majorTMThickness : p,
					minorTMNumber : j(a.minortmnumber, this.minorTMNumber, 4),
					minorTMColor : G(m(a.minortmcolor, d), j(a.minortmalpha, h)),
					minorTMHeight : k ? j(j(a.minortmheight, a.minortmwidth)
									* this.scaleFactor, Math.round(g / 2)) : 0,
					minorTMThickness : j(a.minortmthickness, 1),
					tickMarkDistance : j(j(a.tickmarkdistance, a.tickmarkgap)
									* this.scaleFactor, this.tickMarkDistance,
							3),
					tickValueDistance : j(j(a.tickvaluedistance,
									a.displayvaluedistance)
									* this.scaleFactor, 2)
							+ 2,
					placeTicksInside : j(a.placeticksinside, 0),
					placeValuesInside : j(a.placevaluesinside, 0),
					tickValueStep : i,
					setAdaptiveMin : j(a.setadaptivemin, 0),
					upperLimit : n,
					lowerLimit : e,
					upperLimitDisplay : u(a.upperlimitdisplay),
					lowerLimitDisplay : u(a.lowerlimitdisplay),
					reverseScale : w,
					connectorColor : G(m(a.connectorcolor, d), j(
									a.connectoralpha, h)),
					connectorThickness : l ? j(a.connectorthickness, p) : 0,
					majorTM : [],
					minorTM : [],
					trendPoint : [],
					labels : {
						style : aa({}, b)
					},
					tickValues : {
						style : aa({}, b)
					},
					limitValues : {
						style : aa({}, b)
					}
				}
			},
			configureAxis : function(a, c) {
				var x;
				var b = c.chart, d, e, f, h, g = this.colorM, i, k, l, C, p, n = this.colorRangeGetter, w = (n = n
						&& n.colorArr)
						&& n.length;
				e = n && n[0];
				d = n && n[w - 1];
				h = this.minDataValue;
				k = this.maxDataValue;
				n = a.scale;
				l = n.lowerLimit;
				C = n.upperLimit;
				var w = this.numberFormatter, H;
				if (a.series[0]
						&& (T(h) && T(k)
								? (l = l <= h ? l : e && e.minvalue, C = C >= k
										? C
										: d && d.maxvalue)
								: (l = j(l, e && e.minvalue), C = j(C, d
												&& d.maxvalue)), d = new gb(l,
								C, !1, n, this.numberFormatter), d
								.calculateLimits(this.maxDataValue,
										this.minDataValue), d.calculateTicks(), n.majorTM = d
								.getMajorTM(), n.minorTM = d.getMinorTM(), e = n.min = d.min, x = n.max = d.max, d = x, c.trendpoints
								&& (f = c.trendpoints.point)
								&& (i = f.length) > 0)) {
					n.trendPoint = [];
					for (k = 0; k < i; k += 1)
						h = f[k], p = j(h.dashed, 0) ? fa(m(Math.max(h.dashlen,
												h.thickness), 4), m(h.dashgap,
										3), j(h.thickness, 1)) : void 0, l = j(
								h.startvalue, h.value), C = j(h.endvalue, l), H = l !== C, l <= d
								&& l >= e
								&& C <= d
								&& C >= e
								&& (n.trendPoint.push({
									style : aa(
											aa(a.chart.trendPointStyle.style),
											{}),
									startValue : l,
									endValue : C,
									displayValue : u(D(h.displayvalue), H
													? E
													: w.scale(l)),
									showOnTop : j(h.showontop,
											b.ticksbelowgauge,
											b.ticksbelowgraph, 1),
									color : m(h.color, g.getTrendLightColor()),
									alpha : j(h.alpha, 99),
									thickness : j(h.thickness, 1),
									dashStyle : p,
									useMarker : j(h.usemarker, 0),
									markerColor : G(m(h.markercolor, h.color,
													g.getTrendLightColor()),
											100),
									markerBorderColor : G(m(
													h.markerbordercolor,
													h.bordercolor,
													g.getTrendDarkColor()), 100),
									markerRadius : j(j(h.markerradius)
													* this.scaleFactor, 5),
									markerToolText : ra(h.markertooltext),
									trendValueDistance : j(j(
													h.trendvaluedistance,
													b.trendvaluedistance)
													* this.scaleFactor,
											n.tickValueDistance),
									isZone : H,
									valueInside : j(h.valueinside,
											b.placevaluesinside, 0),
									showBorder : j(h.showborder, 1),
									borderColor : G(m(h.bordercolor, h.color,
													g.getTrendDarkColor()),
											j(h.borderalpha, h.alpha, 100)),
									radius : j(j(h.radius) * this.scaleFactor),
									innerRadius : j(j(h.innerradius)
											* this.scaleFactor)
								}), ka(m(h.bordercolor, h.color, g
												.getTrendDarkColor())))
				}
			},
			placeTickMark : function(a, c, b) {
				var d = this.smartLabel, e = a.chart, f = this.width
						- (e.marginRight + e.marginLeft), h = this.height
						- (e.marginTop + e.marginBottom), a = a.scale, g = a.min, i = a.max, k = a.axisPosition, l = a.showLimits, C = a.showTickValues, p = a.tickMarkDistance, n = a.tickValueDistance, w = Math
						.max(a.majorTMHeight, a.minorTMHeight), H = a.placeTicksInside, P = a.placeValuesInside, A = a.reverseScale, X = 0, x = 0, m = 1, o, q = a.majorTM.length
						- 1, r = k === 2 || k === 4 ? !1 : !0, z = 6, c = r ? h
						- b : f - c, b = 0, s = a.tickValues.style, t = a.limitValues.style;
				a.majorTM[0] && a.majorTM[1]
						&& (o = a.majorTM[1].value - a.majorTM[0].value);
				H || (X += p + w);
				if (C || l) {
					d.setStyle(t);
					l = j(parseInt(t.fontSize, 10), 10);
					C = j(parseInt(t.lineHeight, 10), 12);
					C /= 2;
					P || (X += n);
					k === 3 && (x = l);
					r
							? (h = c - X, f = f / (i - g) * o / 2 + 6)
							: (f = c - X, h = h / (i - g) * o + C);
					if (a.majorTM[0]) {
						o = a.majorTM[0];
						if (o.isString) {
							if (o.displayValue)
								g = d.getSmartText(o.displayValue, f, h), o.displayValue = g.text, o._oriText = g.oriText, r
										? (b = Math.max(b, g.height), o.labelY = k === 1
												&& !P || k === 3 && P ? l
												- g.height : x, z = Math.min(6,
												g.width / 2))
										: (b = Math.max(b, g.width), o.labelY = l
												- (A ? g.height - C : C), o.labelX = 0)
						} else
							m = 0;
						if (r)
							A
									? (o.labelX = z, o.align = ta)
									: (o.labelX = -z, o.align = qa)
					}
					if (a.majorTM[q]) {
						o = a.majorTM[q];
						if (o.isString) {
							if (o.displayValue)
								g = d.getSmartText(o.displayValue, f, h), o.displayValue = g.text, o._oriText = g.oriText, r
										? (b = Math.max(b, g.height), o.labelY = k === 1
												&& !P || k === 3 && P ? l
												- g.height : x, z = Math.min(6,
												g.width / 2))
										: (b = Math.max(b, g.width), o.labelY = l
												- (A ? C : g.height - C), o.labelX = 0)
						} else
							z = 6, q += 1;
						if (r)
							A
									? (o.labelX = -z, o.align = qa)
									: (o.labelX = z, o.align = ta)
					}
					for (; m < q; m++)
						if (m == 0 || m == q - 1 ? (d.setStyle(t), l = j(
								parseInt(t.fontSize, 10), 10), C = j(parseInt(
										t.lineHeight, 10), 12)) : (d
								.setStyle(s), l = j(parseInt(s.fontSize, 10),
								10), C = j(parseInt(s.lineHeight, 10), 12)), r
								&& (x = k === 1 && P || k === 3 && !P ? l : 0), o = a.majorTM[m], o.displayValue)
							o.labelX = j(o.labelX, 0), r
									? (b = Math.max(b, C), o.labelY = x)
									: (g = d.getOriSize(o.displayValue), b = Math
											.max(b, g.width), o.labelY = l
											- g.height / 2)
				}
				d = X;
				P || (X += b);
				X = Math.min(c, X);
				a._labelUsedSpace = P ? b : X - d;
				switch (k) {
					case 1 :
						e.marginTop += X;
						break;
					case 2 :
						e.marginRight += X;
						break;
					case 3 :
						e.marginBottom += X;
						break;
					case 4 :
						e.marginLeft += X
				}
				return X
			},
			eiMethods : {
				feedData : function(a) {
					var c = this.jsVars, b = c.instanceAPI, d = b.hcInstance
							&& b.hcInstance.series && b.hcInstance.series[0], e, f;
					if (this.isActive() && b && b.linearDataParser
							&& (f = b.linearDataParser(a, b.multisetRealtime))) {
						e = this.getDataJSON();
						b.realtimeUpdate ? b.realtimeUpdate(f) : d
								&& d.realtimeUpdate(f);
						c._rtLastUpdatedData = b.multisetRealtime ? f : this
								.getDataJSON();
						ha.raiseEvent("RealTimeUpdateComplete", {
									data : a,
									prevData : e.values,
									source : "feedData",
									url : null
								}, c.fcObj);
						try {
							window.FC_ChartUpdated
									&& window.FC_ChartUpdated(c.fcObj.id)
						} catch (h) {
							setTimeout(function() {
										throw h;
									}, 0)
						}
						return !0
					}
					return !1
				},
				getData : function() {
					var a, c = (a = this.jsVars) && (a = a.instanceAPI)
							&& (a = a.hcInstance) && (a = a.series)
							&& (a = a[0]) && a.data;
					if (a = c && c[0])
						return j(a.value, a.y);
					return null
				},
				setData : function(a, c) {
					var b = "";
					if (a && a.toString || a === "" || a === 0)
						b = "value=" + a.toString();
					if (c && c.toString || c === "")
						b = b + "&label=" + c.toString();
					b && this.feedData(b)
				},
				stopUpdate : function(a) {
					var c = this.__state;
					clearTimeout(c._toRealtime);
					c._rtAjaxObj && c._rtAjaxObj.abort();
					c._rtPaused = !0;
					ha.raiseEvent("RealimeUpdateStopped", {
								source : a
							}, this)
				},
				restartUpdate : function() {
					var a = this.__state;
					if (a._rtDataUrl)
						a._rtPaused = !1, a._rtAjaxObj.get(a._rtDataUrl)
				},
				clearChart : function(a) {
					var c = this.jsVars, b, d, a = a && a.toString
							&& a.toString();
					if ((b = c.instanceAPI) && (b = b.hcInstance)
							&& (d = b.series) && (b = d[0]) && (b = b.chart)
							&& (b = b.options) && (b = b.scale))
						c = b.min, isNaN(c)
								|| (this.feedData("&showLabel=0&value=" + c), B
										.raiseEvent("ChartCleared", {
													source : a
												}, this, [this.id, a]))
				},
				getDataJSON : function() {
					var a = 0, c, b, d = [], e = [], f = [], h = (c = this.jsVars)
							&& (c = c.instanceAPI)
							&& (c = c.hcInstance)
							&& (c = c.series) && (c = c[0]) && c.data;
					for (c = !h || !h.length ? 0 : h.length; a < c; a += 1)
						b = h[a], d.push(j(b.value, b.y)), e.push(b.dataLabel
								&& b.dataLabel.textStr || ""), f
								.push(b.toolText || "");
					return {
						values : d,
						labels : e,
						toolTexts : f
					}
				}
			},
			linearDataParser : function(a, c) {
				var b = {
					values : ",",
					colors : ",",
					toolTexts : ",",
					links : ",",
					valueVisibility : ","
				}, d = this.chartInstance, e, f, h, g, i, k = {}, l = 0, a = a
						&& a.toString && a.toString() || "";
				e = a.split("&");
				g = 0;
				for (i = e.length; g < i; g += 1)
					if (f = e[g].split("="), h = f[1], f = f[0], !(f === E
							|| f === void 0 || h === void 0 || h === E && !c))
						switch (f = f.toLowerCase(), f) {
							case "label" :
								k.labels = h.split(",");
								break;
							case "vline" :
								k.vlines = h.split(",");
								break;
							case "vlinelabel" :
								k.vlineLabels = h.split(",");
								break;
							case "vlinecolor" :
								k.vlineColors = h.split(",");
								break;
							case "vlinethickness" :
								k.vlineThickness = h.split(",");
								break;
							case "vlinedashed" :
								k.vlineDashed = h.split(",");
								break;
							case "value" :
								k.values = h.split("|");
								l = 1;
								break;
							case "showlabel" :
								k.showLabels = h.split(",");
								break;
							case "showvalue" :
								k.valueVisibility = h.split("|");
								break;
							case "tooltext" :
								k.toolTexts = h.split("|");
								break;
							case "link" :
								k.links = h.split("|");
								break;
							case "color" :
								k.colors = h.split("|");
								break;
							case "datastamp" :
								k.dataStamp = h;
								break;
							case "stopupdate" :
								k.pause = h == "1";
								break;
							case "clear" :
								k.clear = h == "1";
								break;
							default :
								k[f] = h
						}
				if (c) {
					if (!k.values)
						k.values = [];
					for (g = k.values.length; g--;) {
						for (f in b)
							k[f]
									? k[f][g] && (k[f][g] = k[f][g].split(","))
									: k[f] = [];
						l = Aa(k.values[g].length, l)
					}
				}
				k.labels && (l = Aa(l, k.labels.length));
				k.dimension = l;
				k.pause && d.stopUpdate && d.stopUpdate("datastream");
				return k
			},
			series : function(a, c) {
				var b = {
					data : []
				}, d, e, f;
				c.legend.enabled = !1;
				d = a.pointers && a.pointers.pointer
						? a.pointers.pointer
						: a.value;
				d instanceof Array || (d = typeof d !== "object" ? [{
							value : d
						}] : [d]);
				f = this.multiValueGauge ? d.length : 1;
				for (e = 0; e < f; e += 1)
					b.data.push(this.getPointStub(d[e], e, c, a));
				c.series[0] = b
			},
			pointValueWatcher : function(a) {
				if (a !== null)
					this.maxDataValue = this.maxDataValue > a
							? this.maxDataValue
							: a, this.minDataValue = this.minDataValue < a
							? this.minDataValue
							: a
			},
			updateSnapPoints : function(a) {
				var c = a.chart, b = this.width, d = this.height, e = c.marginBottom, a = c.marginLeft, f = c.marginRight, c = c.marginTop, b = Ha(
						this.snapLiterals || (this.snapLiterals = {}), {
							chartstartx : 0,
							chartstarty : 0,
							chartwidth : b,
							chartheight : d,
							chartendx : b,
							chartendy : d,
							chartcenterx : b / 2,
							chartcentery : d / 2,
							chartbottommargin : e,
							chartleftmargin : a,
							chartrightmargin : f,
							charttopmargin : c,
							canvasstartx : a,
							canvasstarty : c,
							canvaswidth : b - a - f,
							canvasheight : d - c - e,
							canvasendx : b - f,
							canvasendy : d - e
						});
				b.gaugestartx = b.canvasstartx;
				b.gaugestarty = b.canvasstarty;
				b.gaugeendx = b.canvasendx;
				b.gaugeendy = b.canvasendy;
				b.gaugecenterx = b.canvascenterx = a + b.canvaswidth / 2;
				b.gaugecentery = b.canvascentery = c + b.canvasheight / 2
			}
		}, t.base);
		t("linearscalegauge", {
			spaceManager : function(a, c, b, d) {
				var e = a.chart, f = c.chart, h = b
						- (e.marginRight + e.marginLeft);
				d -= e.marginTop + e.marginBottom;
				var g = e.marginRight, i = e.marginLeft, k = e.marginTop, e = e.marginBottom, l = h
						* 0.3, C = d * 0.3, p, n, w = 0;
				j(f.canvasleftmargin);
				j(f.canvasleftmargin, h * 0.4);
				j(f.canvasrightmargin);
				this.manageTitleSpace
						&& (n = this.manageTitleSpace(a, c, h / 2, d / 2));
				this.placeTickMark && (p = this.placeTickMark(a, l, C));
				this.placeDataLabels
						&& (w = this.placeDataLabels(a, l, C, k, g, e, i, p));
				this.postDataLabelsPlacement
						&& this.postDataLabelsPlacement(a, l, C);
				this.fixCaptionAlignment
						&& this.fixCaptionAlignment(n, a, c, b, 0, w)
			},
			manageTitleSpace : function(a, c, b, d) {
				b = a.chart;
				return o(a, c, this.width - (b.marginRight + b.marginLeft),
						this.height - (b.marginTop + b.marginBottom) - d)
			},
			placeDataLabels : function(a, c, b, d, e, f) {
				var h = this.smartLabel, c = a.chart, g = this.width
						- (c.marginRight + c.marginLeft), i = this.height
						- (c.marginTop + c.marginBottom), d = c.marginBottom, e = a.plotOptions.series.dataLabels, k = e.style, l = j(
						parseInt(k.fontSize, 10), 10), C = j(parseInt(
								k.lineHeight, 10), 12), b = i - b, i = c.valuePadding, p = 0;
				if ((a = a.series[0].data[0]) && a.displayValue !== E)
					h.setStyle(k), a.isLabelString
							? (h = h.getSmartText(a.displayValue, g, b - i), a.displayValue = h.text)
							: h = h.getOriSize(a.displayValue), a.displayValue === " "
							&& (h = {
								height : C
							}), h.height > 0 && (p = h.height + i), p > b
							&& (a = p - b, i = a < i ? i - a : 0, p = b), c.marginBottom += p, e.align = za, c.valuePadding = d
							- f + l + i;
				return p
			},
			postDataLabelsPlacement : function(a) {
				var c = this.smartLabel, b = a.chart, d = this.width
						- (b.marginRight + b.marginLeft), e = this.height
						- (b.marginTop + b.marginBottom), a = a.scale, f = a.min, h = a.max, g = a.axisPosition, i = a.limitValues.style, b = a.reverseScale, k, l = a.majorTM.length
						- 1, g = g === 2 || g === 4 ? !1 : !0, C = j(parseInt(
								i.fontSize, 10), 10), p = j(parseInt(
								i.lineHeight, 10), 12)
						/ 2;
				a.majorTM[0] && a.majorTM[1]
						&& (k = a.majorTM[1].value - a.majorTM[0].value);
				g
						? (e = a._labelUsedSpace, d = d / (h - f) * k / 2 + 6)
						: (d = a._labelUsedSpace, e = e / (h - f) * k + p);
				c.setStyle(i);
				if (a.majorTM[0] && a.majorTM[0].isString
						&& (k = a.majorTM[0], k.displayValue))
					f = c.getSmartText(k._oriText, d, e), k.displayValue = f.text, g
							? (f = Math.min(6, f.width / 2), k.labelX = b
									? f
									: -f)
							: k.labelY = C - (b ? f.height - p : p);
				if (a.majorTM[l] && a.majorTM[l].isString
						&& (k = a.majorTM[l], k.displayValue))
					f = c.getSmartText(k._oriText, d, e), k.displayValue = f.text, g
							? (f = Math.min(6, f.width / 2), k.labelX = b
									? -f
									: f)
							: k.labelY = C - (b ? p : f.height - p)
			},
			getPointStub : function(a, c, b, d, e) {
				var f = this.numberFormatter, c = f.getCleanValue(a.value), b = u(a.link), h = a.tooltext, g = u(D(a.displayvalue)), f = f
						.dataLabels(c), i, d = d.chart, k;
				this.showTooltip ? h !== void 0
						? (e = D(h), k = !0)
						: e = f === null ? !1 : e !== void 0 ? e
								+ this.tooltipSepChar + f : f : e = !1;
				a = j(a.showvalue, this.showValues) ? g !== void 0 ? g : u(f,
						" ") : E;
				this.pointValueWatcher && this.pointValueWatcher(c);
				this.getPointColorObj && (i = this.getPointColorObj(d, c));
				return {
					y : c,
					displayValue : a,
					toolText : e,
					isLabelString : k,
					color : G(i.code, i.alpha),
					link : b,
					colorRange : i,
					doNotSlice : !0
				}
			},
			getPointColorObj : function(a, c) {
				return this.colorRangeGetter.getColorObj(c)
			}
		}, t.gaugebase);
		t("led", {
					singleValued : !0,
					isDataLabelBold : !0,
					preSeriesAddition : function(a, c) {
						var b = c.chart, d = a.chart;
						d.ledGap = j(b.ledgap, 2);
						d.ledSize = j(b.ledsize, 2)
					}
				}, t.linearscalegauge);
		t("vled", {
					defaultSeriesType : "led",
					defaultPlotShadow : 1,
					standaloneInit : !0,
					realtimeEnabled : !0,
					chartleftmargin : 15,
					chartrightmargin : 15,
					charttopmargin : 10,
					chartbottommargin : 10,
					showTooltip : 0,
					connectTickMarks : 0,
					creditLabel : Z
				}, t.led);
		t("hled", {
					defaultPlotShadow : 1,
					standaloneInit : !0,
					defaultGaugePaletteOptions : ma,
					creditLabel : Z,
					isHorizontal : !0,
					connectTickMarks : 1,
					realtimeEnabled : !0
				}, t.vled);
		t("bullet", {
			creditLabel : Z,
			defaultSeriesType : "bullet",
			defaultPlotShadow : 1,
			drawAnnotations : !0,
			realtimeEnabled : !1,
			subTitleFontSizeExtender : 0,
			subTitleFontWeight : "normal",
			connectTickMarks : 0,
			minorTMNumber : 0,
			majorTMHeight : 4,
			chartleftmargin : 10,
			chartrightmargin : 15,
			charttopmargin : 5,
			chartbottommargin : 5,
			isDataLabelBold : !0,
			defaultGaugePaletteOptions : ia(ma, {
				paletteColors : [["A6A6A6", "CCCCCC", "E1E1E1", "F0F0F0"],
						["A7AA95", "C4C6B7", "DEDFD7", "F2F2EE"],
						["04C2E3", "66E7FD", "9CEFFE", "CEF8FF"],
						["FA9101", "FEB654", "FED7A0", "FFEDD5"],
						["FF2B60", "FF6C92", "FFB9CB", "FFE8EE"]],
				bgColor : ["FFFFFF", "CFD4BE,F3F5DD", "C5DADD,EDFBFE",
						"A86402,FDC16D", "FF7CA0,FFD1DD"],
				bgAngle : [270, 270, 270, 270, 270],
				bgRatio : ["0,100", "0,100", "0,100", "0,100", "0,100"],
				bgAlpha : ["100", "60,50", "40,20", "20,10", "30,30"],
				toolTipBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				toolTipBorderColor : ["545454", "545454", "415D6F", "845001",
						"68001B"],
				baseFontColor : ["333333", "60634E", "025B6A", "A15E01",
						"68001B"],
				tickColor : ["333333", "60634E", "025B6A", "A15E01", "68001B"],
				trendColor : ["545454", "60634E", "415D6F", "845001", "68001B"],
				plotFillColor : ["545454", "60634E", "415D6F", "845001",
						"68001B"],
				borderColor : ["767575", "545454", "415D6F", "845001", "68001B"],
				borderAlpha : [50, 50, 50, 50, 50]
			}),
			preSeriesAddition : function(a, c) {
				var b = this.colorRangeGetter.colorArr, d = b.length, e = a.chart, f = c.chart, h;
				d
						&& this.pointValueWatcher
						&& (h = j(b[0].minvalue), T(h)
								&& this.pointValueWatcher(h), h = j(b[d - 1].maxvalue), T(h)
								&& this.pointValueWatcher(h));
				b = j(f.showgaugeborder, f.showcolorrangeborder, 0);
				e.colorRangeBorderThickness = b ? j(
						f.colorrangeborderthickness, f.gaugeborderthickness,
						this.gaugeBorderThickness, 2) : 0
			},
			postSeriesAddition : function(a, c) {
				var b = c.chart;
				a.series[0].data.push(aa(this.getPointStub({
									value : c.target
								}, 0, a, c), {
							borderColor : G(m(b.targetcolor, this.colorM
													.get2DPlotFillColor()), u(
											b.targetalpha, 100)),
							borderWidth : j(b.targetthickness, 3),
							targetThickness : j(b.targetthickness, 3),
							targetFillPercent : j(b.targetfillpercent, 60)
						}))
			},
			getPointStub : function(a, c, b, d, e) {
				var f = this.numberFormatter, c = this.colorM, b = f
						.getCleanValue(a.value), h = u(a.link), g = a.tooltext, i = u(D(a.displayvalue)), k = f
						.dataLabels(b), f = this.colorRangeGetter
						.getColorObj(b), d = d.chart, l = m(d.plotfillcolor, c
								.get2DPlotFillColor()), C = j(d.plotasdot, 0), e = this.showTooltip
						? g !== void 0 ? D(g) : k === null ? !1 : e !== void 0
								? e + this.tooltipSepChar + k
								: k
						: E, a = j(a.showvalue, this.showValues) ? i !== void 0
						? i
						: u(k, " ") : E;
				this.pointValueWatcher && this.pointValueWatcher(b);
				if (/\{/.test(i = m(d.plotbordercolor, "{dark-20}")))
					i = c.parseColorMix(l, i).join();
				return {
					y : b,
					displayValue : a,
					toolText : e,
					plotAsDot : C,
					plotFillPercent : m(d.plotfillpercent, C ? 25 : 40),
					color : G(l, j(d.plotfillalpha, 100)),
					borderColor : G(i, j(d.plotborderalpha, 100)),
					borderWidth : j(d.showplotborder, 0) ? j(
							d.plotborderthickness, 1) : 0,
					link : h,
					colorRange : f,
					doNotSlice : !0
				}
			}
		}, t.linearscalegauge);
		t("vbullet", {
					creditLabel : Z,
					defaultSeriesType : "bullet",
					gaugeType : 4,
					ticksOnRight : 0,
					standaloneInit : !0
				}, t.bullet);
		t("hbullet", {
			creditLabel : Z,
			defaultSeriesType : "hbullet",
			gaugeType : 1,
			standaloneInit : !0,
			isHorizontal : !0,
			defaultCaptionPadding : 5,
			placeDataLabels : function(a, c) {
				var b = this.smartLabel, d = a.chart, e = this.width
						- (d.marginRight + d.marginLeft), f = this.height
						- (d.marginTop + d.marginBottom), h = a.plotOptions.series.dataLabels, g = h.style, i = j(
						parseInt(g.fontSize, 10), 10);
				e -= c;
				var k = d.valuePadding, l = 0, C = a.series[0].data[0];
				if (C && C.displayValue !== E)
					b.setStyle(g), C.isLabelString
							? (b = b.getSmartText(C.displayValue, e - k, f), C.displayValue = b.text)
							: b = b.getOriSize(C.displayValue), b.height > 0
							&& (l = b.width + k), l > e && (l = e), d.marginRight += l, h.align = qa, h.x = 0, h.y = i
							- b.height / 2;
				return l
			},
			manageTitleSpace : function(a, c, b) {
				var d = a.chart, e = c.chart, f = this.width
						- (d.marginRight + d.marginLeft), d = this.height
						- (d.marginTop + d.marginBottom), h = j(
						e.captionpadding, 2), e = j(j(e.captiononright, 0)
						? e.canvasrightmargin
						: e.canvasleftmargin);
				T(e) && (e -= h);
				b = j(e, f - b);
				return eb(a, c, b, d, this.defaultCaptionPadding, this.width,
						this.height)
			},
			fixCaptionAlignment : function(a, c, b, d, e, f) {
				var d = c.chart, h = b.chart, g = j(h.canvasleftmargin), h = j(h.canvasrightmargin);
				d.marginRight += a.right;
				d.marginLeft += a.left;
				if (T(g))
					d.spacingLeft = d.marginLeft = g, d.spacingLeft -= a.left
							+ 0 - 1;
				if (T(h))
					d.spacingRight = d.marginRight = h, d.spacingRight -= a.right
							+ 0 - 1;
				fb(c, b, this.width, e, f)
			}
		}, t.bullet);
		t("lineargauge", {
			creditLabel : Z,
			defaultSeriesType : "lineargauge",
			multiValueGauge : !0,
			realtimeEnabled : !0,
			gaugeType : 1,
			chartleftmargin : 15,
			chartrightmargin : 15,
			charttopmargin : 10,
			chartbottommargin : 10,
			colorRangeFillMix : "{light-10},{dark-20},{light-50},{light-85}",
			colorRangeFillRatio : "0,8,84,8",
			isDataLabelBold : !0,
			eiMethods : jQuery.extend({}, t.gaugebase.eiMethods, {
						getData : function(a) {
							var c, b = (c = this.jsVars) && (c = c.instanceAPI)
									&& (c = c.hcInstance) && (c = c.series)
									&& (c = c[0]) && c.data;
							c = !b || !b.length ? 0 : b.length;
							return a !== void 0 && a > 0 && a <= c ? (a = b[a
									- 1], j(a.value, a.y)) : null
						},
						getDataForId : function(a) {
							var c, b = (c = this.jsVars) && (c = c.instanceAPI)
									&& (c = c.hcInstance) && (c = c.series)
									&& (c = c[0]) && c.dataById;
							return b[a] && b[a].point ? (a = b[a].point, j(
									a.value, a.y)) : null
						},
						setData : function(a, c, b) {
							var d = "", e = "", f, h = (f = this.jsVars)
									&& (f = f.instanceAPI)
									&& (f = f.hcInstance) && (f = f.series)
									&& (f = f[0]) && f.data;
							f = h && h.length || 0;
							h = 0;
							if (a > 0
									&& a <= f
									&& (c && c.toString() || c === "" || c === 0)) {
								for (h = a; --h;)
									e += "|";
								d += "value=" + (e + c);
								if (b && b.toString || b === "")
									d += "&label=" + e + b.toString();
								this.feedData(d)
							}
						},
						setDataForId : function(a, c) {
							var b, d = (b = this.jsVars) && (b = b.instanceAPI)
									&& (b = b.hcInstance) && (b = b.series)
									&& (b = b[0]) && b.dataById;
							d[a] && d[a].index !== void 0
									&& this.setData(d[a].index + 1, c)
						}
					}),
			placeDataLabels : function(a, c, b, d, e, f, h, g) {
				var d = a.scale, e = this.smartLabel, f = a.chart, h = this.width
						- (f.marginRight + f.marginLeft), i = this.height
						- (f.marginTop + f.marginBottom), k, l = a.plotOptions.series.dataLabels;
				k = l.style;
				var C = a.scale && a.scale.labels && a.scale.labels.style;
				j(parseInt(k.fontSize, 10), 10);
				var p = j(parseInt(k.lineHeight, 10), 12), b = i - b, c = h - c, n = f.valuePadding, w, H = 0, P = 0, A = 0, m = 0, x = 0, o = 0, q = a.series
						&& a.series[0] && a.series[0].data || [], a = a.scale
						&& a.scale.trendPoint || [], W = 0, r = q.length, z;
				for (e.setStyle(k); W < r; W += 1)
					if ((z = q[W]) && z.displayValue !== E)
						w = n
								+ z.radius
								* (z.sides <= 3 ? 0.5 : z.sides % 2 ? 1.1 - 1
										/ z.sides : 1), f.valuePadding = Math
								.max(f.valuePadding, w), this.isHorizontal
								? (z.isLabelString
										? (k = e.getSmartText(z.displayValue,
												h, b - n), z.displayValue = k.text)
										: k = e.getOriSize(z.displayValue), z.displayValue === " "
										&& (k = {
											height : p
										}), k.height > 0 && (H = k.height + w), H > b
										&& (H = b), f.pointerOnOpp
										? (d.axisPosition === 3
												&& (m = Math.max(g, m), H = Math
														.max(g, H)), P = Math
												.max(P, H))
										: (d.axisPosition === 1
												&& (x = Math.max(g, x), H = Math
														.max(g, H)), A = Math
												.max(H, A)))
								: (z.isLabelString
										? (k = e.getSmartText(z.displayValue, c
														- n, i), z.displayValue = k.text)
										: k = e.getOriSize(z.displayValue), k.width > 0
										&& (o = k.width + w), o > c && (o = c), f.pointerOnOpp
										? d.axisPosition === 2
												? (f.marginRight -= g, f.marginRight += Math
														.max(g, o))
												: f.marginRight += o
										: d.axisPosition === 4
												? (f.marginLeft -= g, f.marginLeft += Math
														.max(g, o))
												: f.marginLeft += o), l.align = za;
				e.setStyle(C);
				W = 0;
				for (r = a.length; W < r; W += 1)
					if ((z = a[W]) && z.displayValue !== E)
						if (w = n + z.markerRadius * 0.5, f.valuePadding = Math
								.max(w, f.valuePadding), this.isHorizontal)
							k = e.getOriSize(z.displayValue), k.height > 0
									&& (H = k.height + w), H > b && (H = b), z.showOnTop
									? (d.axisPosition === 1
											&& (x = Math.max(g, x), H = Math
													.max(g, H)), A = Math.max(
											A, H))
									: (d.axisPosition === 3
											&& (m = Math.max(g, m), H = Math
													.max(g, H)), P = Math.max(
											H, P)), l.align = za;
				this.isHorizontal
						&& (f.marginBottom += P - m, f.marginTop += A - x, H = A
								+ P - m - x);
				return H
			},
			preSeriesAddition : function(a, c) {
				var b = a.chart, d = c.chart, e = this.colorM, f = a.scale;
				b.pointerRadius = j(d.pointerradius, 10);
				b.pointerBgColor = m(d.pointerbgcolor, d.pointercolor, e
								.getPointerBgColor());
				b.pointerBgAlpha = j(d.pointerbgalpha, 100);
				b.pointerBorderColor = m(d.pointerbordercolor, e
								.getPointerBorderColor());
				b.pointerBorderThickness = j(d.pointerborderthickness, 1);
				b.pointerBorderAlpha = j(d.pointerborderalpha, 100);
				b.pointerSides = j(d.pointersides, 3);
				b.showGaugeLabels = j(d.showgaugelabels, 1);
				b.showPointerShadow = j(d.showpointershadow, d.showshadow, 1);
				b.valuePadding = j(d.valuepadding, 2);
				this.isHorizontal
						? (b.pointerOnOpp = j(d.pointerontop,
								f.axisPosition == 1 ? 0 : 1) ? 0 : 1, b.gaugeType = f.reverseScale
								? 2
								: 1, b.valueAbovePointer = j(
								d.valueabovepointer, b.pointerOnOpp ? 0 : 1, 1), b.valueInsideGauge = b.valueAbovePointer === b.pointerOnOpp
								? 1
								: 0)
						: (b.pointerOnOpp = j(d.pointeronright,
								f.axisPosition == 2 ? 0 : 1), b.gaugeType = f.reverseScale
								? 4
								: 3)
			},
			getPointStub : function(a, c, b, d, e) {
				var f = this.numberFormatter, b = b.chart, h = f
						.getCleanValue(a.value), g = u(a.link), i = a.tooltext, k = u(D(a.displayvalue)), l = f
						.dataLabels(h), f = this.colorRangeGetter
						.getColorObj(h), d = d.chart, C = !1;
				this.showTooltip ? i !== void 0
						? (e = D(i), C = !0)
						: e = l === null ? !1 : e !== void 0 ? e
								+ this.tooltipSepChar + l : l : e = E;
				k = j(a.showvalue, this.showValues) ? k !== void 0 ? k : u(l,
						" ") : E;
				i = j(a.sides, b.pointerSides);
				i < 3 && (i = 3);
				this.pointValueWatcher && this.pointValueWatcher(h);
				return {
					y : h,
					displayValue : k,
					id : m(a.id, "pointer_" + c),
					editable : m(a.editable, d.editmode),
					isLabelString : C,
					toolText : e,
					plotFillPercent : m(d.plotfillpercent, 40),
					color : G(m(a.color, a.bgcolor, b.pointerBgColor), j(
									a.alpha, a.bgalpha, b.pointerBgAlpha)),
					borderColor : G(m(a.bordercolor, b.pointerBorderColor), j(
									d.showplotborder, 1)
									? b.pointerBorderAlpha
									: 0),
					borderWidth : j(a.borderthickness, b.pointerBorderThickness),
					radius : j(a.radius, b.pointerRadius),
					sides : i,
					link : g,
					colorRange : f,
					doNotSlice : !0,
					tooltipConstraint : this.tooltipConstraint
				}
			}
		}, t.linearscalegauge);
		t("hlineargauge", {
					creditLabel : Z,
					defaultSeriesType : "lineargauge",
					standaloneInit : !0,
					isHorizontal : !0
				}, t.lineargauge);
		t("vlineargauge", {
					creditLabel : Z,
					defaultSeriesType : "lineargauge",
					connectTickMarks : 0,
					standaloneInit : !0
				}, t.lineargauge);
		t("thermometer", {
			creditLabel : Z,
			defaultSeriesType : "thermometer",
			connectTickMarks : 0,
			tickMarkDistance : 0,
			standaloneInit : !0,
			realtimeEnabled : !0,
			isDataLabelBold : !0,
			defaultPlotShadow : 0,
			defaultGaugePaletteOptions : ia(ma, {
						thmBorderColor : ["545454", "60634E", "415D6F",
								"845001", "68001B"],
						thmFillColor : ["999999", "ADB68F", "A2C4C8", "FDB548",
								"FF7CA0"]
					}),
			preSeriesAddition : function(a, c) {
				var b = a.chart, d = c.chart, e = this.colorM, f;
				f = this.numberFormatter;
				b.thmOriginX = j(d.thmoriginx, d.gaugeoriginx);
				b.thmOriginY = j(d.thmoriginy, d.gaugeoriginy);
				b.thmBulbRadius = f.getCleanValue(d.thmbulbradius, !0);
				b.thmHeight = f
						.getCleanValue(j(d.thmheight, d.gaugeheight), !0);
				b.gaugeFillColor = m(d.gaugefillcolor, d.thmfillcolor, e
								.getThmFillColor());
				b.gaugeFillAlpha = j(d.gaugefillalpha, d.thmfillalpha, na);
				f = j(d.gaugeborderalpha, j(d.showgaugeborder, 1) ? 40 : 0);
				b.gaugeBorderColor = G(m(d.gaugebordercolor, e
										.getThmBorderColor()), f);
				b.gaugeBorderThickness = j(d.gaugeborderthickness, 1);
				b.thmGlassColor = m(d.thmglasscolor, S(b.gaugeFillColor, 30));
				b.use3DLighting = !j(d.use3dlighting, 1)
			},
			getPointColorObj : function(a) {
				return {
					code : m(a.gaugefillcolor, a.thmfillcolor, this.colorM
									.getThmFillColor()),
					alpha : j(a.gaugefillalpha, a.thmfillalpha, 100)
				}
			},
			getPointStub : t.linearscalegauge,
			placeDataLabels : t.linearscalegauge,
			manageTitleSpace : t.linearscalegauge,
			spaceManager : function(a, c, b, d) {
				var e = a.chart;
				b -= e.marginRight + e.marginLeft;
				var f = d - (e.marginTop + e.marginBottom), h = e.marginRight, g = e.marginLeft, i = e.marginTop, k = e.marginBottom, d = b
						* 0.3, l = f * 0.3, C = e.thmOriginX, p = e.thmOriginY, n = e.thmBulbRadius, w = e.thmHeight, H = T(C), P = T(p), A = T(n), m = T(w), x = a.scale.axisPosition === 4, o = 0, q, W, r = 0;
				this.manageTitleSpace
						&& (f -= r = this.manageTitleSpace(a, c, b / 2, f / 2));
				this.placeTickMark
						&& (b -= this.placeTickMark(a, j(n, 4) * 2, l));
				if (!A)
					e.thmBulbRadius = n = Math.min(b / 2, j(w, f) * 0.13), A = !0;
				A
						&& (W = n * 0.643, d = q = 2 * W, H ? x
								? e.marginRight += o = b - C - W
								: e.marginLeft += o = C - W : x
								? e.marginRight += o = Math.min(n, b / 2) - W
								: e.marginLeft += o = Math.min(n, b / 2) - W, b -= o);
				e.marginRight += b - q;
				P && (l = p - r + n);
				this.placeDataLabels
						&& (f -= this.placeDataLabels(a, d, l, i, h, k, g));
				if (!m)
					e.thmHeight = P
							? w = Math.max(p - r + n - W, 3 * n)
							: w = Math.max(f - W, 3 * n);
				e.marginTop += P ? p - r + n - w : f - w;
				c = n * 1.766;
				e.marginBottom += c;
				e.valuePadding += c;
				this.postDataLabelsPlacement
						&& this.postDataLabelsPlacement(a, d, l)
			}
		}, t.gaugebase);
		t("cylinder", {
			creditLabel : Z,
			defaultSeriesType : "cylinder",
			connectTickMarks : 0,
			tickMarkDistance : 2,
			standaloneInit : !0,
			charttopmargin : 10,
			chartbottommargin : 10,
			chartrightmargin : 10,
			chartleftmargin : 10,
			isDataLabelBold : !0,
			realtimeEnabled : !0,
			defaultGaugePaletteOptions : ia(ma, {
				cylFillColor : ["CCCCCC", "ADB68F", "E1F5FF", "FDB548",
						"FF7CA0"],
				periodColor : ["EEEEEE", "ECEEE6", "E6ECF0", "FFF4E6", "FFF2F5"]
			}),
			preSeriesAddition : function(a, c) {
				var b = a.chart, d = c.chart;
				b.cylFillColor = m(d.gaugefillcolor, d.cylfillcolor,
						this.colorM.getCylFillColor());
				b.cylGlassColor = m(d.cylglasscolor, "FFFFFF")
			},
			getPointColorObj : function(a) {
				return {
					code : m(a.gaugefillcolor, a.thmfillcolor, this.colorM
									.getCylFillColor()),
					alpha : j(a.gaugefillalpha, a.thmfillalpha, 100)
				}
			},
			getPointStub : t.linearscalegauge,
			placeDataLabels : t.linearscalegauge,
			manageTitleSpace : t.linearscalegauge,
			spaceManager : function(a, c, b, d) {
				var e = a.chart, f = c.chart, h = b
						- (e.marginRight + e.marginLeft), g = d
						- (e.marginTop + e.marginBottom), i = e.marginRight, k = e.marginLeft, l = e.marginTop, C = e.marginBottom, p = h
						* 0.2, n = g * 0.3, w = j(f.cylyscale, 30), H = this.scaleFactor, P = this.numberFormatter;
				this.manageTitleSpace
						&& (g -= this.manageTitleSpace(a, c, h / 2, g / 2));
				this.placeTickMark && (h -= this.placeTickMark(a, p, n));
				this.placeDataLabels
						&& (g -= this.placeDataLabels(a, p, n, l, i, C, k) + 8);
				this.postDataLabelsPlacement
						&& this.postDataLabelsPlacement(a, p, n);
				e.cylHeight = u(f.cylheight);
				if (w > 50 || w < 0)
					w = 30;
				e.cylYScale = w /= 100;
				a = Math.max(h / 2, 5);
				a = j(u(P.getCleanValue(f.cylradius, !0)) * H, a);
				P = j(u(P.getCleanValue(f.cylheight, !0)) * H, g - a * w * 2);
				e.marginLeft = j(u(f.cyloriginx) * H, e.marginLeft);
				e.marginRight = b - (e.marginLeft + a * 2);
				b = e.yScaleRadius = a * w;
				w = e.cylinderTotalHeight = b * 2 + P;
				g = g - w + e.marginTop;
				e.marginTop = j(u(f.cyloriginy) * H - P, b + g);
				e.marginBottom = d - (e.marginTop + P);
				e.cylRadius = a;
				e.cylHeight = P;
				e.yScaleRadius = b
			}
		}, t.gaugebase);
		t("angulargauge", {
			standaloneInit : !0,
			drawAnnotations : !0,
			defaultSeriesType : "angulargauge",
			creditLabel : Z,
			isAngular : !0,
			eiMethods : t.lineargauge.eiMethods,
			multiValueGauge : !0,
			realtimeEnabled : !0,
			defaultGaugePaletteOptions : ia(ma, {
						dialColor : ["999999,ffffff,999999",
								"ADB68F,F3F5DD,ADB68F", "A2C4C8,EDFBFE,A2C4C8",
								"FDB548,FFF5E8,FDB548", "FF7CA0,FFD1DD,FF7CA0"],
						dialBorderColor : ["999999", "ADB68F", "A2C4C8",
								"FDB548", "FF7CA0"],
						pivotColor : ["999999,ffffff,999999",
								"ADB68F,F3F5DD,ADB68F", "A2C4C8,EDFBFE,A2C4C8",
								"FDB548,FFF5E8,FDB548", "FF7CA0,FFD1DD,FF7CA0"],
						pivotBorderColor : ["999999", "ADB68F", "A2C4C8",
								"FDB548", "FF7CA0"]
					}),
			subTitleFontSizeExtender : 0,
			charttopmargin : 5,
			chartrightmargin : 5,
			chartbottommargin : 5,
			chartleftmargin : 5,
			defaultPlotShadow : 1,
			gaugeBorderColor : "{dark-20}",
			gaugeBorderThickness : 1,
			updateSnapPoints : function(a) {
				t.gaugebase.updateSnapPoints.apply(this, arguments);
				var c = a.series[0], b = this.snapLiterals;
				b.gaugestartangle = a.chart.gaugeStartAngle;
				b.gaugeendangle = a.chart.gaugeEndAngle;
				b.chartcenterx = b.gaugecenterx = c.gaugeOriginX;
				b.chartcentery = b.gaugecentery = c.gaugeOriginY;
				b.gaugeinnerradius = c.gaugeInnerRadius;
				b.gaugeouterradius = c.gaugeOuterRadius
			},
			preSeriesAddition : function(a, c) {
				var b = c.chart, d = j(b.gaugescaleangle, 180), e = j(b.gaugestartangle), b = j(b.gaugeendangle), f = T(e), h = da
						? 0.0010
						: 0.01, g = T(b);
				if (d > 360 || d < -360)
					d = d > 0 ? 360 : -360;
				if (b > 360 || b < -360)
					b %= 360;
				if (e > 360 || e < -360)
					e %= 360;
				if (f && g) {
					if (d = e - b, d > 360 || d < -360)
						d %= 360, b = e - d
				} else if (f) {
					if (b = e - d, b > 360 || b < -360)
						b %= 360, e += b > 0 ? -360 : 360
				} else if (g) {
					if (e = b + d, e > 360 || e < -360)
						e %= 360, b += e > 0 ? -360 : 360
				} else
					d === 360 ? (e = 180, b = -180) : d === -360
							? b = e = -180
							: (e = 90 + d / 2, b = e - d);
				Math.abs(d) === 360 && (d += d > 0 ? -h : h, b = e - d);
				b = 360 - b;
				e = 360 - e;
				if (e > 360 || b > 360)
					e -= 360, b -= 360;
				a.chart.gaugeStartAngle = e * wa;
				a.chart.gaugeEndAngle = b * wa;
				a.chart.gaugeScaleAngle = -d * wa
			},
			series : function(a, c) {
				var b = {
					data : [],
					colorByPoint : !0
				}, d = a.chart, e = this.numberFormatter, f = this.colorM, h = b.showValue = j(
						d.showvalue, d.showrealtimevalue, 0), g = this.scaleFactor, i = 0, k = a.dials
						&& a.dials.dial, l = j(d.editmode, 0), C = i = j(
						u(d.pivotradius) * g, 5);
				b.pivotRadius = C;
				var p = 0, n = k && k.length, w, H, P, A, o, x, q = 0;
				n || (p = -1, n = 0, k = []);
				for (; p < n; p += 1)
					w = k[p] || {}, d = e.getCleanValue(w.value), this.pointValueWatcher
							&& this.pointValueWatcher(d), H = j(
							u(w.rearextension) * g, 0), i = Math.max(i, H), P = u(
							e.dataLabels(d), E), o = j(w.showvalue, h), x = j(u(w.valuey)
							* g), A = m(w.tooltext, w.hovertext) ? !0 : !1, o
							&& !T(x) && (q += 1), b.data.push({
						y : d,
						id : m(w.id, p),
						color : {
							FCcolor : {
								color : m(w.color, w.bgcolor, f.getDialColor()),
								angle : 90
							}
						},
						showValue : o,
						editMode : j(w.editmode, l),
						borderColor : G(
								m(w.bordercolor, f.getDialBorderColor()), j(
										w.borderalpha, 100)),
						borderThickness : j(w.borderthickness, 1),
						baseWidth : j(u(w.basewidth) * g, C * 1.6),
						topWidth : j(u(w.topwidth) * g, 0),
						rearExtension : H,
						valueX : j(u(w.valuex) * g),
						valueY : x,
						radius : j(u(w.radius) * g),
						link : m(w.link, E),
						isLabelString : A,
						toolText : m(w.tooltext, w.hovertext, P),
						displayValue : o ? m(P, " ") : E,
						doNotSlice : !0
					});
				b.displayValueCount = q;
				b.compositPivotRadius = i;
				c.series[0] = b
			},
			postSeriesAddition : function(a, c) {
				var b = c.chart, d = a.series[0], e = this.colorM, f;
				d.valueBelowPivot = j(b.valuebelowpivot, 0);
				d.gaugeFillMix = b.gaugefillmix;
				d.gaugeFillRatio = b.gaugefillratio;
				if (d.gaugeFillMix == void 0)
					d.gaugeFillMix = "{light-10},{light-70},{dark-10}";
				if (d.gaugeFillRatio == void 0)
					d.gaugeFillRatio = ",6";
				else if (d.gaugeFillRatio != "")
					d.gaugeFillRatio = "," + d.gaugeFillRatio;
				f = e.parseColorMix(m(b.pivotfillcolor, b.pivotcolor,
								b.pivotbgcolor, e.getPivotColor()), m(
								b.pivotfillmix,
								"{light-10},{light-30},{dark-20}"));
				d.pivotFillAlpha = e.parseAlphaList(m(b.pivotfillalpha, na),
						f.length);
				d.pivotFillRatio = e.parseRatioList(m(b.pivotfillratio, R),
						f.length);
				d.pivotFillColor = f.join();
				d.pivotFillAngle = j(b.pivotfillangle, 0);
				d.isRadialGradient = m(b.pivotfilltype, "radial").toLowerCase() == "radial";
				d.showPivotBorder = j(b.showpivotborder, 0);
				d.pivotBorderThickness = j(b.pivotborderthickness, 1);
				d.pivotBorderColor = G(m(b.pivotbordercolor, e
										.getPivotBorderColor()),
						d.showPivotBorder == 1 ? m(b.pivotborderalpha, na) : R);
				this.parseColorMix = e.parseColorMix;
				this.parseAlphaList = e.parseAlphaList;
				this.parseRatioList = e.parseRatioList
			},
			spaceManager : function(a, c, b, d) {
				var e = a.chart, f = c.chart, h = a.scale, g = a.series[0], i = g.displayValueCount, k = h.tickValues.style, l = j(
						parseInt(k.lineHeight, 10), 12), C = j(parseInt(
								k.fontSize, 10), 10), p = C * (da ? 0.8 : 1), n = l
						* (da ? 0.1 : 0.3), w = da ? 0 : l * 0.1, H = j(
						parseInt(
								a.plotOptions.series.dataLabels.style.lineHeight,
								10), 12);
				b -= e.marginRight + e.marginLeft;
				var P = d - (e.marginTop + e.marginBottom), A = this.scaleFactor, m = g.compositPivotRadius, x, d = e.gaugeStartAngle, q = e.gaugeEndAngle, r = i
						* H + 2 + g.pivotRadius, W = 0, H = g.valueBelowPivot, i = /^\d+\%$/
						.test(f.gaugeinnerradius) ? parseInt(
						f.gaugeinnerradius, 10)
						/ 100 : 0.7;
				P -= o(a, c, b, P / 2);
				H || (W = r, r = 0);
				g.gaugeOuterRadius = j(Math.abs(u(f.gaugeouterradius) * A));
				g.gaugeInnerRadius = j(Math.abs(u(f.gaugeinnerradius) * A),
						g.gaugeOuterRadius * i);
				var s = e.gaugeStartAngle, z = e.gaugeEndAngle, H = P, c = g.gaugeOuterRadius, t = j(u(f.gaugeoriginx)
						* A - e.marginLeft), e = j(u(f.gaugeoriginy) * A
						- e.marginTop), f = Math.max(m, C), m = r, A = T(c), I = T(t), r = T(e), F = Math.PI
						* 2, O = Math.PI, M = Math.PI / 2, v = O + M, c = {
					radius : c,
					centerX : t,
					centerY : e
				}, D, N, L, G, y = !1, B, Q = s % F;
				Q < 0 && (Q += F);
				(f = f || 0) && f < b / 2 && f < H / 2 && (y = !0);
				m > H / 2 && (m = H / 2);
				W > H / 2 && (W = H / 2);
				N = Math.cos(s);
				G = Math.sin(s);
				L = Math.cos(z);
				B = Math.sin(z);
				D = Math.min(N, L, 0);
				L = Math.max(N, L, 0);
				N = Math.min(G, B, 0);
				G = Math.max(G, B, 0);
				if (!A || !I || !r) {
					z -= s;
					s = Q + z;
					if (s > F || s < 0)
						L = 1;
					if (z > 0) {
						if (Q < M && s > M || s > F + M)
							G = 1;
						if (Q < O && s > O || s > F + O)
							D = -1;
						if (Q < v && s > v || s > F + v)
							N = -1
					} else {
						if (Q > M && s < M || s < -v)
							G = 1;
						if (Q > O && s < O || s < -O)
							D = -1;
						if (Q > v && s < v || s < -M)
							N = -1
					}
					I
							? A
									|| (z = b - t, x = D ? Math.min(z / L, -t
													/ D) : z / L)
							: (s = b / (L - D), t = -s * D, x = s, y
									&& (b - t < f
											? (t = b - f, z = b - t, x = D
													? Math.min(z / L, -t / D)
													: z / L)
											: t < f
													&& (t = f, z = b - t, x = D
															? Math.min(z / L,
																	-t / D)
															: z / L)), c.centerX = t);
					r ? A
							|| (z = H - e, x = Math.min(x, N ? Math.min(z / G,
											-e / N) : z / G)) : (s = H
							/ (G - N), e = -s * N, y
							&& (H - e < f
									? (e = H - f, z = H - e, x = Math.min(x, N
													? Math.min(z / G, -e / N)
													: z / G))
									: e < f
											&& (e = f, z = H - e, x = Math.min(
													x, N ? Math.min(z / G, -e
																	/ N) : z
															/ G))), H - e < m
							? (e = H - m, z = H - e, x = Math.min(x, N ? Math
											.min(z / G, -e / N) : z / G))
							: e < W
									&& (e = W, z = H - e, x = Math.min(x, N
													? Math.min(z / G, -e / N)
													: z / G)), x = Math.min(x,
							s), c.centerY = e);
					c.maxRadius = x;
					if (c.maxRadius <= 0)
						c.maxRadius = Math.min(b / 2, H / 2)
				}
				x = g.gaugeOriginX = c.centerX;
				H = g.gaugeOriginY = c.centerY;
				t = h.majorTM;
				e = 0;
				s = t.length;
				a = a.labels.smartLabel;
				z = h.min;
				I = h.max - h.min;
				f = b - x;
				P -= H;
				m = h.placeValuesInside;
				W = Math.cos(89.98 * wa);
				A = -W;
				r = T(g.gaugeOuterRadius);
				D = h.tickValueDistance;
				F = h.showTickValues;
				O = h.showLimits;
				c = j(g.gaugeOuterRadius, c.maxRadius);
				M = j(g.gaugeInnerRadius, c * i);
				h = c;
				c *= 0.2;
				var E, y = l * 1.5, q = (q - d) / I;
				if (F || O) {
					m ? M > D + l ? E = M - D : (E = M, D = 0) : (h += D, r
							|| (c += D));
					for (a.setStyle(k); e < s; e += 1)
						if (k = t[e], I = d + (k.value - z) * q, v = Math
								.cos(I), M = Math.sin(I), I = k.displayValue, L = a
								.getOriSize(I), F = L.width, O = L.height, N = O
								/ 2, F > 0 && O > 0)
							if (k.x = 0, m) {
								k.align = v > W ? ta : v < A ? qa : za;
								if (k.isString
										&& (Q = E * v, L = Math.abs(Q), L < F))
									L = a.getSmartText(I, Math.max(L, l), y), k.displayValue = L.text, O = L.height, N = O
											/ 2;
								v > W || v < A ? (k.y = C - N + w, k.y -= O
										* 0.4 * M) : k.y = p
										- (M < 0 ? 0 : O - n)
							} else if (k.align = v > W ? qa : v < A ? ta : za, Q = h
									* v, L = h * M, r
									|| (L > 0 ? (G = N + N * M, P < L + G
											&& (L = P - G, h = Math.max(L / M,
													c))) : L < 0
											&& (G = N - N * M, H < -L + G
													&& (L = G - H, h = Math
															.max(L / M, c)))), v > W) {
								if (Q + F > f)
									if (r) {
										if (k.isString)
											L = a.getSmartText(I, f - Q, y), k.displayValue = L.text, O = L.height, N = O
													/ 2
									} else if (Q = f - F, h = Math
											.max(Q / v, c), Q = h * v, k.isString
											&& Q + F > f)
										L = a.getSmartText(I, f - Q, y), k.displayValue = L.text, O = L.height, N = O
												/ 2, F = L.width, Q = f - F, h = Math
												.max(Q / v, c);
								k.y = C - N + w + O * 0.4 * M
							} else if (v < A) {
								if (F - Q > x)
									if (r) {
										if (k.isString)
											L = a.getSmartText(I, x + Q, y), k.displayValue = L.text, O = L.height, N = O
													/ 2
									} else if (Q = F - x, h = Math
											.max(Q / v, c), Q = h * v, k.isString
											&& F - Q > x)
										L = a.getSmartText(I, x + Q, y), k.displayValue = L.text, F = L.width, O = L.height, N = O
												/ 2, Q = F - x, h = Math.max(Q
														/ v, c);
								k.y = C - N + w + O * 0.4 * M
							} else {
								M > 0 ? (v = P, N = O + L) : (v = H, N = O - L);
								if (r) {
									if (k.isString && N > v || F > b)
										L = a.getSmartText(I, b, Math.max(O - N
																+ v, l)), k.displayValue = L.text, O = L.height
								} else if (N > v
										&& (h = Math.max(v - O, c), N = O + h), k.isString
										&& N > v || F > b)
									L = a
											.getSmartText(I, b, Math.max(v - c,
															l)), k.displayValue = L.text, O = L.height, h = Math
											.max(v - O, c);
								k.y = p - (M > 0 ? 0 : O - n)
							}
				}
				if (!r
						&& (g.gaugeOuterRadius = m ? h : h - D, g.gaugeOuterRadius <= 0))
					g.gaugeOuterRadius = Math.abs(c);
				g.gaugeInnerRadius = j(g.gaugeInnerRadius, g.gaugeOuterRadius
								* i)
			}
		}, t.gaugebase);
		t("bulb", {
			defaultSeriesType : "bulb",
			defaultPlotShadow : 1,
			standaloneInit : !0,
			drawAnnotations : !0,
			defaultGaugePaletteOptions : ma,
			charttopmargin : 10,
			chartrightmargin : 10,
			chartbottommargin : 10,
			chartleftmargin : 10,
			realtimeEnabled : !0,
			isDataLabelBold : !0,
			preSeriesAddition : function(a) {
				a = a.chart;
				a.colorRangeGetter = this.colorRangeGetter;
				a.defaultColors = ma.paletteColors[0];
				a.defaultColLen = a.defaultColors.length
			},
			getPointColor : function(a, c, b) {
				var d;
				b ? (a = Ea(a), b = S(a, 65), d = S(a, 75), a = K(a, 65), c = {
					FCcolor : {
						gradientUnits : "objectBoundingBox",
						cx : 0.4,
						cy : 0.4,
						r : "80%",
						color : b + q + d + q + a,
						alpha : c + q + c + q + c,
						ratio : "0,30,70",
						radialGradient : !0
					}
				}) : c = G(a, c);
				return c
			},
			getPointStub : function(a, c, b, d, e) {
				var c = b.chart, f = d.chart, b = this.numberFormatter, d = b
						.getCleanValue(a.value), h = b.dataLabels(d), b = u(a.link), g = a.tooltext, i = u(D(a.displayvalue)), a = this.colorRangeGetter
						.getColorObj(d), k = c.useColorNameAsValue = j(
						f.usecolornameasvalue, 0), l = a.colorObj || a.prevObj
						|| a.nextObj || {}, C = this.colorM, p = D(m(l.label,
						l.name)), n = m(f.gaugefillalpha, l.alpha, na), w = m(
						l.bordercolor, f.gaugebordercolor, K(l.code, 70)), H = j(
						l.borderalpha, f.gaugeborderalpha, "90")
						* n / 100, P = j(f.showgaugeborder, 0) ? j(
						f.gaugeborderthickness, 1) : 0, f = c.is3D = j(f.is3d,
						1), f = this.getPointColor(l.code, n, f), A;
				if (a.isOnMeetPoint)
					l = a.nextObj;
				c.gaugeFillAlpha = n;
				w = G(	/\{/.test(w) ? C.parseColorMix(
								m(l.bordercolor, l.code), w)[0] : w, H);
				this.showTooltip ? g !== void 0
						? (e = D(g), A = !0)
						: e = h === null ? !1 : e !== void 0 ? e
								+ this.tooltipSepChar + h : h : e = !1;
				c = i !== void 0 ? i : h;
				k && (c = p);
				this.pointValueWatcher && this.pointValueWatcher(d);
				return {
					y : d,
					displayValue : c,
					toolText : e,
					isLabelString : A,
					colorName : p,
					color : f,
					borderWidth : P,
					borderColor : w,
					colorRange : a,
					link : b,
					doNotSlice : !0
				}
			},
			spaceManager : function(a, c, b, d) {
				var e = a[V].smartLabel, f = a.series[0], h = f && f.data[0], f = a.chart, g = c.chart, i = f.scaleFactor = this.scaleFactor;
				b -= f.marginRight + f.marginLeft;
				d -= f.marginTop + f.marginBottom;
				var k = f.marginLeft, l = f.marginTop, C = j(g.valuepadding, 4), p = f.useColorNameAsValue, n, w = 0, H;
				this.showValues
						? (h.y = u(h.y, a.scale.min), h.displayValue = u(
								h.displayValue, this.numberFormatter
										.dataLabels(a.scale.min)))
						: h.displayValue = E;
				H = h.displayValue;
				f.gaugeOriginX = j(g.gaugeoriginx, g.bulboriginx, -1);
				f.gaugeOriginY = j(g.gaugeoriginy, g.bulboriginy, -1);
				f.gaugeRadius = j(g.gaugeradius, g.bulbradius, -1);
				g = f.gaugeRadius !== -1;
				d -= c = o(a, c, b, d * 0.3);
				l += c;
				f.dataLabels = {
					style : a.plotOptions.series.dataLabels.style
				};
				c = f.dataLabels.style;
				e.setStyle(c);
				f.placeValuesInside == 1
						? (a = g ? f.gaugeRadius * i : Math.min(b, d) / 2, n = Math
								.sqrt(Math.pow(a * 2, 2) / 2), e = e
								.getSmartText(H, n, n))
						: (n = (g ? d - f.gaugeRadius * 2 * i : d * 0.7) - C, e = e
								.getSmartText(H, b, n), w = e.height, a = Math
								.min(b, d - w)
								/ 2);
				if (p)
					h.displayValue = e.text;
				f.valuePadding = C;
				f.valueTextHeight = e.height;
				f.labelLineHeight = parseInt(c.lineHeight);
				e = k + b / 2;
				h = l + (d - w) / 2;
				g && (a = f.gaugeRadius * i);
				f.gaugeOriginX != -1 && (e = f.gaugeOriginX * i);
				f.gaugeOriginY != -1 && (h = f.gaugeOriginY * i);
				f.gaugeRadius = a;
				f.gaugeOriginX = e;
				f.gaugeOriginY = h
			}
		}, t.gaugebase);
		t("drawingpad", {
					standaloneInit : !0,
					defaultSeriesType : "drawingpad",
					defaultPlotShadow : 1,
					drawAnnotations : !0,
					chartleftmargin : 0,
					charttopmargin : 0,
					chartrightmargin : 0,
					chartbottommargin : 0,
					defaultGaugePaletteOptions : ma,
					series : function(a, c) {
						var b = {
							data : [],
							colorByPoint : !0
						};
						c.legend.enabled = !1;
						HCData = b.data;
						c.chart.plotBackgroundColor = oa;
						c.chart.plotBorderColor = oa;
						b instanceof Array
								? c.series = c.series.concat(b)
								: c.series.push(b);
						this.configureAxis(c, a);
						a.trendlines
								&& ea(a.trendlines, c.yAxis, c[V], !1,
										this.isBar)
					},
					spaceManager : function() {
					},
					creditLabel : Z
				}, t.bulb);
		t("funnel", {
			standaloneInit : !0,
			defaultSeriesType : "funnel",
			sliceOnLegendClick : !0,
			defaultPlotShadow : 1,
			subTitleFontSizeExtender : 0,
			tooltippadding : 4,
			drawAnnotations : !0,
			defaultGaugePaletteOptions : ma,
			isDataLabelBold : !1,
			formatnumberscale : 1,
			preSeriesAddition : function(a, c) {
				var b = c.chart, d = this.colorM, e = a.plotOptions.series.dataLabels;
				e.connectorWidth = j(b.smartlinethickness, 1);
				e.connectorColor = G(
						m(b.smartlinecolor, d.get2DBaseFontColor()), j(
								b.smartlinealpha, 100));
				j(b.showlegend, 0)
						? (a.legend.enabled = !0, a.legend.reversed = !Boolean(j(
								b.reverselegend, 0)))
						: a.legend.enabled = !1;
				a.plotOptions.series.point.events.legendItemClick = b.interactivelegend === R
						? Da
						: function() {
							this.slice();
							return !1
						}
			},
			series : function(a, c, b) {
				a.data && a.data.length > 0 && (a = this.point(b, {
							data : [],
							colorByPoint : !0,
							showInLegend : !0
						}, a.data, a.chart, c), c.series.push(a))
			},
			point : function(a, c, b, d, e) {
				var f, h, g, a = e[V], i, k, l, C, p = 0, n, w = 0, H = [], P = m(
						d.plotborderthickness, v);
				j(d.use3dlighting, 1);
				j(d.showzeropies, 1);
				var A = !0, o = this.isPyramid, x = j(d.showpercentintooltip, 1), r = j(
						d.showlabels, 1), s = j(d.showvalues, 1), W = j(
						d.showpercentvalues, d.showpercentagevalues, 0), t = m(
						d.tooltipsepchar, d.hovercapsepchar, db), z = m(
						d.labelsepchar, t), I = m(d.plotbordercolor,
						d.piebordercolor), mb = this.smartLabel, F = this.numberFormatter, O = b.length, M = j(
						d.issliced, 0), y = 0, B, N, L, J = {
					apply : d.showshadow == v,
					opacity : 1
				};
				c.isPyramid = o;
				L = c.streamlinedData = j(d.streamlineddata, 1);
				c.is2d = j(d.is2d, 0);
				c.isHollow = j(d.ishollow, L ? 1 : 0);
				N = j(d.percentofprevious, 0);
				h = j(this.isPyramid ? d.pyramidyscale : d.funnelyscale);
				c.labelDistance = Math.abs(j(d.labeldistance, d.nametbdistance,
						50));
				c.showLabelsAtCenter = j(d.showlabelsatcenter, 0);
				c.yScale = h >= 0 && h <= 40 ? h / 200 : 0.2;
				if (!r && !s)
					e.plotOptions.series.dataLabels.enabled = !1, e.tooltip.enabled === !1
							&& (A = !1);
				c.useSameSlantAngle = j(d.usesameslantangle, L ? 0 : 1);
				var K;
				for (f = h = 0; h < O; h += 1)
					if (g = b[h], !b[h].vline
							&& (g.value = B = F.getCleanValue(g.value, !0), B !== null))
						K = K || B, g.value = B, H.push(g), p += B, f += 1, K = Math
								.max(K, B);
				c.valueSum = p;
				O = H.length;
				!o && L && H.sort(function(a, b) {
							return b.value - a.value
						});
				!o && !L && (w += 1, c.data.push({
							showInLegend : !1,
							y : p,
							name : "",
							shadow : J,
							smartTextObj : n,
							color : i,
							alpha : k,
							borderColor : G(l, C),
							borderWidth : P,
							link : u(g.link),
							displayValue : E,
							doNotSlice : m(d.enableslicing, v) != v
						}));
				for (h = 0; h < H.length; h += 1) {
					g = H[h];
					b = g.value;
					O = h ? H[h - 1].value : b;
					f = D(m(g.label, g.name, E));
					n = mb.getOriSize(f);
					i = h && !o && L ? h - 1 : h;
					i = m(g.color, e.colors[i % e.colors.length]);
					k = m(g.alpha, d.plotfillalpha, na);
					l = m(g.bordercolor, I, S(i, 25)).split(q)[0];
					C = d.showplotborder != 1 ? R : m(g.borderalpha,
							d.plotborderalpha, d.pieborderalpha, "80");
					J.opacity = Math.max(k, C) / 100;
					if (B = j(g.issliced, M))
						y += 1, a.preSliced = B;
					n = {
						showInLegend : f !== E,
						y : b,
						name : f,
						shadow : J,
						smartTextObj : n,
						color : i,
						alpha : k,
						borderColor : G(l, C),
						borderWidth : P,
						link : u(g.link),
						isSliced : B,
						displayValue : E,
						doNotSlice : m(d.enableslicing, v) != v,
						tooltipConstraint : this.tooltipConstraint
					};
					if (!h && !o && L)
						n.showInLegend = !1;
					c.data.push(n);
					if (A)
						n = f, l = F.percentValue(b / (o || !L ? p : N ? O : K)
								* 100), C = F.dataLabels(b) || E, k = x === 1
								? l
								: C, i = r === 1 ? n : E, l = j(g.showvalue, s) === 1
								? W === 1 ? l : C
								: E, l = (C = u(D(g.displayvalue)))
								? C
								: l !== E && i !== E ? i + z + l : m(i, l) || E, n = n != E
								? n + t + k
								: k, c.data[w].displayValue = l, c.data[w].toolText = m(
								D(g.tooltext), n), w += 1
				}
				c.labelMaxWidth = 0;
				c.noOFSlicedElement = y;
				return c
			},
			spaceManager : function(a, c, b, d) {
				var e = this.smartLabel, f = c.chart, h = a.chart, g = m(
						f.legendposition, $a).toLowerCase();
				b -= h.marginRight + h.marginLeft;
				var i = d - (h.marginTop + h.marginBottom), k = this.isPyramid, l;
				if (d = a.series[0]) {
					var C = this._tempSnap = {
						top3DSpace : 0,
						bottom3DSpace : 0,
						topLabelSpace : 0,
						rightLabelSpace : 0
					};
					i -= o(a, c, b, i / 2);
					a.legend.enabled
							&& (g === ta ? b -= s(a, c, b / 2, i, !0) : i -= I(
									a, c, b, i / 2, !0));
					c = i * 0.1;
					f = j(f.slicingdistance, c);
					c = f > 2 * c ? 0 : f;
					l = Math.min(2 * (i - c), b);
					h.marginTop += c / 2;
					h.marginBottom += c / 2;
					d.SlicingDistance = f;
					var c = d.data, g = c.length, i = k ? 0 : 1, p, n, w, H = 0, f = d.labelDistance
							+ 3, P = d.showLabelsAtCenter, A, X = Math.min(l, b
									* 0.3);
					l -= X;
					var x = b - X - f;
					A = a.plotOptions.series.dataLabels.style;
					var q = j(parseInt(A.lineHeight, 10), 10), a = 0, r = c[0].y, W = d.valueSum, t, z = k
							? 0
							: 1, v, G = 0.8 / r, F = d.useSameSlantAngle == 1, O = !d.streamlinedData;
					e.setStyle(A);
					if (!k && c[0].displayValue)
						n = e.getSmartText(c[0].displayValue, b, q), c[0].displayValue = n.text, c[0].labelWidht = e
								.getOriSize(n.text).width, h.marginTop += C.topLabelSpace = q
								+ 4;
					for (; i < g; i += 1)
						p = c[i], P
								? e.getSmartText(p.displayValue, b, q)
								: (k ? (A = H + p.y / 2, t = A / W) : t = O
										? 0.2 + G * H
										: F ? p.y / r : Math.sqrt(p.y / r), A = X
										* t, w = x + (X - A) / 2, n = e
										.getSmartText(p.displayValue, w, q), p.displayValue = n.text, a = Math
										.max(a, n.width), l > 0
										&& (n = n.width > 0 ? w - n.width : w
												+ f, A = 1 / (t + 1)
												* (A + 2 * n + X), l = Math
												.min(l, A - X)), H += p.y);
					p
							&& (v = k ? 1 : O ? 0.2 : F ? p.y / r : Math
									.sqrt(p.y / r));
					e = X + l;
					a > 0 ? h.marginRight += C.rightLabelSpace = b - e : f = 0;
					d.labelDistance = d.connectorWidth = f;
					if (!d.is2d)
						h.marginTop += C.top3DSpace = e * d.yScale * z / 2, h.marginBottom += C.bottom3DSpace = e
								* d.yScale * v / 2
				}
			},
			updateSnapPoints : function() {
				t.gaugebase.updateSnapPoints.apply(this, arguments);
				var a = this.snapLiterals, c = this._tempSnap || {};
				a.plotwidth = a.canvaswidth;
				a.plotsemiwidth = a.canvaswidth / 2;
				a.plotheight = a.canvasheight + c.top3DSpace + c.bottom3DSpace;
				a.plotstartx = a.canvasstartx;
				a.plotstarty = a.canvasstarty - c.top3DSpace;
				a.plotendx = a.canvasendx;
				a.plotendy = a.canvasendy + c.bottom3DSpace;
				a.canvaswidth += c.rightLabelSpace;
				a.canvasheight = a.plotheight + c.topLabelSpace;
				a.canvasstarty = a.plotstarty - c.topLabelSpace;
				a.canvasendy = a.plotendy;
				a.canvasendx += c.rightLabelSpace
			},
			useSortedData : !0,
			creditLabel : Z
		}, t.gaugebase);
		t("pyramid", {
					defaultGaugePaletteOptions : ma,
					subTitleFontSizeExtender : 0,
					drawAnnotations : !0,
					standaloneInit : !0,
					defaultSeriesType : "pyramid",
					defaultPlotShadow : 1,
					useSortedData : !1,
					isPyramid : 1,
					creditLabel : Z
				}, t.funnel);
		t("sparkbase", {
			defaultPlotShadow : 0,
			useSortedData : !1,
			subTitleFontSizeExtender : 0,
			subTitleFontWeight : "normal",
			drawAnnotations : !0,
			showYAxisValues : 0,
			numdivlines : 0,
			chartrightmargin : 3,
			chartleftmargin : 3,
			charttopmargin : 3,
			chartbottommargin : 3,
			decimals : 2,
			showTrendlineLabel : 0,
			zeroplanethickness : 0,
			tooltippadding : 1,
			useScaleRecursively : !0,
			styleApplicationDefinition_font : t.gaugebase.styleApplicationDefinition_font,
			defaultGaugePaletteOptions : ia(ma, {
				paletteColors : [
						["555555", "A6A6A6", "CCCCCC", "E1E1E1", "F0F0F0"],
						["A7AA95", "C4C6B7", "DEDFD7", "F2F2EE"],
						["04C2E3", "66E7FD", "9CEFFE", "CEF8FF"],
						["FA9101", "FEB654", "FED7A0", "FFEDD5"],
						["FF2B60", "FF6C92", "FFB9CB", "FFE8EE"]],
				bgColor : ["FFFFFF", "CFD4BE,F3F5DD", "C5DADD,EDFBFE",
						"A86402,FDC16D", "FF7CA0,FFD1DD"],
				bgAngle : [270, 270, 270, 270, 270],
				bgRatio : ["0,100", "0,100", "0,100", "0,100", "0,100"],
				bgAlpha : ["100", "60,50", "40,20", "20,10", "30,30"],
				canvasBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				canvasBgAngle : [0, 0, 0, 0, 0],
				canvasBgAlpha : ["100", "100", "100", "100", "100"],
				canvasBgRatio : ["", "", "", "", ""],
				canvasBorderColor : ["BCBCBC", "BEC5A7", "93ADBF", "C97901",
						"FF97B1"],
				toolTipBgColor : ["FFFFFF", "FFFFFF", "FFFFFF", "FFFFFF",
						"FFFFFF"],
				toolTipBorderColor : ["545454", "545454", "415D6F", "845001",
						"68001B"],
				baseFontColor : ["333333", "60634E", "025B6A", "A15E01",
						"68001B"],
				trendColor : ["666666", "60634E", "415D6F", "845001", "68001B"],
				plotFillColor : ["666666", "A5AE84", "93ADBF", "C97901",
						"FF97B1"],
				borderColor : ["767575", "545454", "415D6F", "845001", "68001B"],
				borderAlpha : [50, 50, 50, 50, 50],
				periodColor : ["EEEEEE", "ECEEE6", "E6ECF0", "FFF4E6", "FFF2F5"],
				winColor : ["666666", "60634E", "025B6A", "A15E01", "FF97B1"],
				lossColor : ["CC0000", "CC0000", "CC0000", "CC0000", "CC0000"],
				drawColor : ["666666", "A5AE84", "93ADBF", "C97901", "FF97B1"],
				scorelessColor : ["FF0000", "FF0000", "FF0000", "FF0000",
						"FF0000"]
			}),
			preSeriesAddition : function(a, c) {
				if (this.name == "sparkwinloss") {
					var b = c.data || c.dataset && c.dataset[0]
							&& c.dataset[0].data, d, e, f = {
						w : 1,
						l : -1,
						d : 0.1
					};
					if ((d = b && b.length) > 0)
						for (; d;)
							d -= 1, e = b[d], e.value = f[e.value.toLowerCase()]
				}
				b = a.chart;
				d = c.chart;
				e = this.colorM = new ba(b.paletteIndex, d.palettethemecolor,
						this);
				b.backgroundColor = {
					FCcolor : {
						color : m(d.bgcolor, e.get2DBgColor()),
						alpha : m(d.bgalpha, e.get2DBgAlpha()),
						angle : m(d.bgangle, e.get2DBgAngle()),
						ratio : m(d.bgratio, e.get2DBgRatio())
					}
				};
				b.borderColor = G(m(d.bordercolor, e.get2DBorderColor()), m(
								d.borderalpha, e.get2DBorderAlpha()));
				b.borderWidth = j(d.showborder, this.showBorder, 0) ? j(
						d.borderthickness, 1) : 0;
				b.plotBorderColor = G(m(d.canvasbordercolor, e
										.get2DCanvasBorderColor()), j(
								d.showcanvasborder, 1) == 0 ? R : m(
								d.canvasborderalpha, na));
				b.plotBorderWidth = j(d.canvasborderthickness, 1);
				e = ka(m(d.basefontcolor, e.get2DBaseFontColor()));
				a.tooltip.style.color = a.plotOptions.series.dataLabels.style.color = a.title.style.color = a.subtitle.style.color = e;
				e = b.openColor = ka(m(d.opencolor, "0099FF"));
				f = b.closeColor = ka(m(d.closecolor, "0099FF"));
				b.highColor = ka(m(d.highcolor, "00CC00"));
				b.lowColor = ka(m(d.lowcolor, "CC0000"));
				a.chart.openValue = {
					style : aa({}, a.plotOptions.series.dataLabels.style)
				};
				ya(a.chart.openValue.style);
				a.chart.openValue.style.color = e;
				a.chart.closeValue = {
					style : aa({}, a.plotOptions.series.dataLabels.style)
				};
				ya(a.chart.openValue.style);
				a.chart.closeValue.style.color = f;
				a.chart.highLowValue = {
					style : aa({}, a.plotOptions.series.dataLabels.style)
				};
				this.parseStyles(a);
				if (this.showCanvas == 0)
					b.plotBackgroundColor = oa;
				if (!this.showCanvasBorder)
					b.plotBorderWidth = 0;
				if (!b.useRoundEdges)
					b.plotShadow = 0;
				d.zeroplanethickness = m(d.zeroplanethickness,
						this.zeroplanethickness)
			},
			spaceManager : function(a, c, b, d) {
				var e = a[V].smartLabel, f = c.chart, h = a.series[0], g = a.chart, i = b
						- (g.marginRight + g.marginLeft), k = j(f.canvasleftmargin), l = j(f.canvasrightmargin), C = a.valuePadding = j(
						f.valuepadding, 2), p = a.plotOptions.series.dataLabels.style, n = parseInt(p.lineHeight), w = i, H = 0, P = 0;
				if (h) {
					d = eb(a, c, i * 0.7, d, void 0, b, d);
					w -= d.left + d.right;
					var i = b - (g.marginRight + g.marginLeft), A = h = 0, o = 0;
					e.setStyle(p);
					T(g.openValue.label)
							&& (e.setStyle(g.openValue.style), n = j(parseInt(
											g.openValue.style.lineHeight, 10),
									10), p = e.getSmartText(g.openValue.label,
									w, n * 1.5), p.width > 0
									&& (H = h = p.width + C, w -= h));
					T(g.closeValue.label)
							&& (e.setStyle(g.closeValue.style), n = j(parseInt(
											g.closeValue.style.lineHeight, 10),
									10), p = e.getSmartText(g.closeValue.label,
									w, n * 1.5), p.width > 0
									&& (P = A = p.width + C, w -= A));
					T(g.highLowValue.label)
							&& (e.setStyle(g.highLowValue.style), n = j(
									parseInt(g.highLowValue.style.lineHeight,
											10), 10), e = e.getSmartText(
									g.highLowValue.label, w, n * 1.5), e.width > 0
									&& (P += o = e.width + C));
					g.marginRight += o + A;
					g.marginLeft += h;
					T(k)
							? (g.spacingLeft = g.marginLeft = k, g.spacingLeft -= d.left
									+ h)
							: g.marginLeft += d.left;
					T(l)
							? (g.spacingRight = g.marginRight = l, g.spacingRight -= d.right
									+ o + A)
							: g.marginRight += d.right;
					this.xAxisMinMaxSetter(a, c, i);
					g = a.xAxis;
					l = g.min;
					i = g.max;
					k = j(f.periodlength, 0);
					f = G(m(f.periodcolor, this.colorM.getPeriodColor()), j(
									f.periodalpha, 100));
					C = 1;
					if (k > 0)
						for (; l <= i; l += k)
							C ? (g.plotBands.push({
										color : f,
										from : l,
										to : Math.min(i, l + k),
										zIndex : 1
									}), C = 0) : C = 1;
					fb(a, c, b, H, P)
				}
			}
		}, r);
		t("sparkline", {
			standaloneInit : !0,
			defaultSeriesType : "sparkline",
			creditLabel : Z,
			showtooltip : 0,
			showCanvas : 0,
			point : t.linebase.point,
			lineThickness : 1,
			anchorRadius : 2,
			anchorBorderThickness : 0,
			postSeriesAddition : function(a, c) {
				var b = a.chart, d = c.chart, e = this.colorM, f = a.series
						&& a.series[0], h = f && a.series[0].data, g, i, k, l = t.highValue, C = t.lowValue, p = a[V].numberFormatter, n = b.openColor, w = b.closeColor, H = b.highColor, P = b.lowColor;
				j(d.periodlength, -1);
				m(d.periodcolor, e.getPeriodColor());
				m(d.periodalpha, na);
				var A = ka(m(d.anchorcolor, e.get2DPlotFillColor())), o = j(
						d.showopenanchor, d.drawanchors, d.showanchors, 1), x = j(
						d.showcloseanchor, d.drawanchors, d.showanchors, 1), q = j(
						d.showhighanchor, d.drawanchors, d.showanchors, 1), r = j(
						d.showlowanchor, d.drawanchors, d.showanchors, 1);
				j(d.showopenvalue, 1);
				j(d.showclosevalue, 1);
				j(d.showhighlowvalue, 1);
				var s = j(d.anchoralpha, 100), I = j(d.drawanchors,
						d.showanchors, 0) == 1 ? j(d.anchoralpha, 100) : 0, z, v, D = 0, F = m(
						d.linecolor, e.get2DPlotFillColor()), O = j(
						d.linealpha, 100);
				if ((e = g = h && h.length) > 0) {
					i = c.data || c.dataset && c.dataset[0]
							&& c.dataset[0].data;
					for (f.color = G(F, O); g;) {
						g -= 1;
						f = h[g];
						k = i[g];
						f.color = G(m(k.color, F), j(k.alpha, O));
						f.marker.fillColor = G(m(f.anchorbgcolor, A), j(
										f.anchorbgalpha, I));
						if (f.y == l)
							f.marker.fillColor = G(m(f.anchorbgcolor, H), j(
											f.anchorbgalpha, s)), f.marker.enabled = !!q, z = p
									.dataLabels(f.y);
						if (f.y == C)
							f.marker.fillColor = G(m(f.anchorbgcolor, P), j(
											f.anchorbgalpha, s)), f.marker.enabled = !!r, v = p
									.dataLabels(f.y);
						if (!j(k.showvalue, d.showvalue, d.showvalues, 0))
							f.displayValue = E;
						T(f.y) && (D = 1)
					}
					f = h[0];
					f.marker.fillColor = G(m(f.anchorbgcolor, n), j(
									f.anchorbgalpha, s));
					f.marker.enabled = !!o;
					l = p.dataLabels(f.y);
					f = h[e - 1];
					f.marker.fillColor = G(m(f.anchorbgcolor, w), j(
									f.anchorbgalpha, s));
					f.marker.enabled = !!x;
					h = p.dataLabels(f.y);
					b.openValue.label = b.closeValue.label = b.highLowValue.label = E;
					if (D)
						b.openValue.label = j(d.showopenvalue, 1) ? l : E, b.closeValue.label = j(
								d.showclosevalue, 1) ? h : E, b.highLowValue.label = j(
								d.showhighlowvalue, 1)
								? '[<span style="color: '
										+ H
										+ '">'
										+ z
										+ '</span><span>|</span><span style="color: '
										+ P + '">' + v + "</span>]"
								: E
				}
			}
		}, t.sparkbase);
		t("sparkcolumn", {
			standaloneInit : !0,
			defaultSeriesType : "column",
			creditLabel : Z,
			showCanvasBorder : !0,
			point : t.column2dbase.point,
			postSeriesAddition : function(a, c) {
				var b = c.chart, d = this.colorM, e = a.series && a.series[0]
						&& a.series[0].data, f, h, g, i = t.highValue, k = t.lowValue, l = m(
						b.plotfillalpha, na), C = m(b.plotfillcolor, d
								.get2DPlotFillColor()), p = m(
						b.plotborderalpha, na), n = m(b.plotbordercolor), w = m(
						b.highcolor, C), H = m(b.lowcolor, C), P = m(
						b.highbordercolor, n), A = m(b.lowbordercolor, n), o = j(
						b.showplotborder, 0) ? j(b.plotborderthickness, 1) : 0;
				if ((d = e && e.length) > 0)
					for (h = c.data || c.dataset && c.dataset[0]
							&& c.dataset[0].data; d;) {
						d -= 1;
						f = e[d];
						g = h[d];
						var x = m(g.color, C), q = m(g.alpha, l), r = m(
								g.bordercolor, n), s = m(g.borderalpha, p), I = m(
								g.ratio, b.plotfillratio), z = m(360
										- b.plotfillangle, 90);
						f.y == i
								&& (x = m(g.color, w), r = m(g.bordercolor, P));
						f.y == k
								&& (x = m(g.color, H), r = m(g.bordercolor, A));
						x = this.getColumnColor(g, x, q, r, s, I, z,
								a.chart.useRoundEdges);
						f.color = x[0];
						f.borderColor = x[1];
						f.borderWidth = o;
						if (!j(g.showvalue, b.showvalue, b.showvalues, 0))
							f.displayValue = E
					}
			},
			getColumnColor : function(a, c, b, d, e, f, h, g, i, k) {
				var l, d = m(d, K(c, 60));
				l = c.split(q);
				a = b.split(q);
				d = d.split(q);
				e = e.split(q);
				k ? i = {
					FCcolor : {
						color : l[0],
						alpha : a[0]
					}
				} : g ? (c = l[0], b = a[0], i = {
					FCcolor : {
						color : K(c, 75) + q + S(c, 25) + q + K(c, 80) + q
								+ S(c, 65) + q + K(c, 80),
						alpha : b + q + b + q + b + q + b + q + b,
						ratio : "0,10,13,57,20",
						angle : i ? "-180" : "0"
					}
				}, d = [K(c, 70)]) : (b = Wa(b, l.length), i = {
					FCcolor : {
						color : c,
						alpha : b,
						ratio : f,
						angle : i ? 180 - h : h
					}
				});
				return [i, {
							FCcolor : {
								color : d[0],
								alpha : e[0]
							}
						}]
			}
		}, t.sparkbase);
		t("sparkwinloss", {
			standaloneInit : !0,
			defaultSeriesType : "sparkwinloss",
			creditLabel : Z,
			showCanvasBorder : !1,
			showCanvas : 0,
			showtooltip : 0,
			postSeriesAddition : function(a, c) {
				var b = a.chart, d = c.chart, e = this.colorM, f = a.series
						&& a.series[0] && a.series[0].data, h, g, i, k = m(
						d.plotfillalpha, na), l = m(d.plotfillcolor, e
								.get2DPlotFillColor()), C = m(
						d.plotborderalpha, na), p = m(d.plotbordercolor), n = j(
						d.showplotborder, 0) ? j(d.plotborderthickness, 1) : 0, w = m(
						d.wincolor, e.getWinColor()), H = m(d.losscolor, e
								.getLossColor()), P = m(d.drawcolor, e
								.getDrawColor()), A = m(d.scorelesscolor, e
								.getScoreLessColor()), o = E, x, q, r, s, t, z = 0, I = 0, v = 0;
				a.tooltip.enabled = !1;
				if ((e = f && f.length) > 0) {
					for (g = c.data || c.dataset && c.dataset[0]
							&& c.dataset[0].data; e;) {
						e -= 1;
						h = f[e];
						i = g[e];
						switch (i.value) {
							case 1 :
								o = m(i.color, w, l);
								z += 1;
								break;
							case -1 :
								o = m(i.color, H, l);
								I += 1;
								break;
							case 0.1 :
								o = m(i.color, P, l), v += 1
						}
						i.scoreless == 1 && (o = m(i.color, A, l));
						x = m(i.alpha, k);
						q = m(i.bordercolor, p);
						r = m(i.borderalpha, C);
						s = m(i.ratio, d.plotfillratio);
						t = m(360 - d.plotfillangle, 90);
						x = this.getColumnColor(i, o, x, q, r, s, t,
								a.chart.useRoundEdges);
						h.color = x[0];
						h.borderColor = x[1];
						h.borderWidth = n;
						if (!j(i.showvalue, d.showvalue, d.showvalues, 0))
							h.displayValue = E
					}
					if (j(d.showvalue, 1) == 1)
						b.closeValue.style = aa({},
								a.plotOptions.series.dataLabels.style), b.closeValue.label = z
								+ "-" + I + (v > 0 ? "-" + v : E)
				}
			}
		}, t.sparkcolumn);
		t("sparkwinloss", {
					creditLabel : Z
				}, t.linebase);
		r = {
			realtimeEnabled : !0,
			linearDataParser : t.gaugebase.linearDataParser,
			eiMethods : Ha({}, t.gaugebase.eiMethods),
			decimals : 2,
			prepareRealtimeValueText : function() {
				var a = this.hcJSON[V];
				return a.rtvHTMLWrapper
						+ a.realtimeValues
								.join(this.hcJSON.chart.realtimeValueSeparator)
						+ "</span>" + a.x.name
			},
			chart : function() {
				var a = this.dataObj.chart, c = this.numberFormatter, b, d, e, f = j(
						a.showrealtimevalue, 1), h = j(a.realtimevaluepadding), g, i, a = this.dataObj.chart;
				a.adjustdiv = "0";
				if (f)
					a.xaxisname = a.xaxisname
							? "<br />" + a.xaxisname
							: "<br />";
				b = t.msareabase.chart.apply(this, arguments);
				e = b.chart;
				d = b[V];
				g = b.series;
				d.isDual
						? (d._userPMin = j(a.pyaxisminvalue), d._userPMax = j(a.pyaxismaxvalue), d._userSMin = j(a.syaxisminvalue), d._userSMax = j(a.syaxismaxvalue))
						: (d._userMin = j(a.yaxisminvalue), d._userMax = j(a.yaxismaxvalue));
				e.dataStreamURL = m(a.datastreamurl, "");
				e.refreshInterval = j(a.refreshinterval, 1);
				e.updateInterval = j(a.updateinterval, e.refreshInterval);
				e.clearInterval = j(a.clearchartinterval, 0);
				e.dataStamp = a.datastamp;
				e.showRealtimeValue = f;
				e.realtimeValueSeparator = m(a.realtimevaluesep, ", ");
				e.realtimeValuePadding = h;
				e.realtimeValueFont = m(a.realtimevaluefont, "");
				e.realtimeValueFontBold = m(a.realtimevaluefontbold, 0);
				e.realtimeValueFontColor = m(a.realtimevaluefontcolor, "");
				e.realtimeValueFontSize = j(a.realtimevaluefontsize, "");
				if (f) {
					if (!d.realtimeValues) {
						d.realtimeValues = [];
						f = 0;
						for (h = g.length; f < h; f++)
							a = g[f], i = (i = a.data) && i.length
									&& i[i.length - 1] && i[i.length - 1].y, d.realtimeValues[f] = c
									.dataLabels(i, a.yAxis)
					}
					if (!d.x.name)
						d.x.name = b.xAxis.title.text;
					if (!d.rtvHTMLWrapper)
						d.rtvHTMLWrapper = '<span style="font-weight: '
								+ (e.realtimeValueFontBold ? "bold" : "normal")
								+ (e.realtimeValueFontColor ? ";color:"
										+ e.realtimeValueFontColor.replace(Fa,
												Ja) : "")
								+ (e.realtimeValueFontSize ? ";font-size:"
										+ e.realtimeValueFontSize + "px" : "")
								+ (e.realtimeValueFont ? ";font-family:"
										+ e.realtimeValueFont : "") + '">';
					b.xAxis.title.text = this.prepareRealtimeValueText()
				}
				return b
			},
			configureAxis : function(a) {
				var c = a[V], b = a.xAxis, d = c.x, e = c.axisGridManager, f = d.catCount, h = c.oriCatTmp, c = this.dataObj, g = c.chart
						|| (c.chart = {}), c = a.series, i = c[0], g = this.numDisplaySets = j(
						g.numdisplaysets, f || 15), k = i.data.length, l = b.plotLines, C = l
						&& l.length || 0, i = [], p;
				p = ((this.dataObj.categories || (this.dataObj.categories = [{
							category : []
						}]))[0] || (this.dataObj.categories[0] = {
					category : []
				})).category || (this.dataObj.categories[0].category = []);
				if (f === 0)
					this.chartInstance.jsVars._forceReflow = !0;
				k = g - k;
				if (k > 0) {
					for (; C--;)
						l[C].value += k;
					for (b.plotLines = []; k--;)
						i[k] = null, e.addXaxisCat(b, k, k, " "), h
								.unshift(null), p.unshift({
									label : " "
								});
					b.plotLines = b.plotLines.reverse().concat(l)
				} else
					k && (Ia(b.plotLines, k, -0.5), h.splice(0, -k));
				for (k = c.length; k--;)
					e = c[k], b = e.data, e.data = i.concat(b.slice(-g));
				this.needsRedraw = f === 0;
				d.catCount = g;
				return t.msareabase.configureAxis
						&& t.msareabase.configureAxis.apply(this, arguments)
			},
			pointValueWatcher : function(a, c, b, d, e) {
				d = a[V];
				if (!d._skipValueWatcher) {
					b = b === void 0 ? 0 : b;
					if (!d._chartState)
						d._chartState = {};
					d._chartState[b] || (d._chartState[b] = {
						nullValObj : {},
						nValueMap : {},
						pValueMap : {},
						nullArr : [],
						valueArr : [],
						pSumArr : [],
						nSumArr : [],
						pNullArr : [],
						nNullArr : [],
						isLastNull : !1,
						isLastPSumNull : !1,
						isLastNSumNull : !1,
						currentIdx : -1
					});
					var a = d[b], b = d._chartState[b], d = b.nullValObj, f = b.nullArr, h = b.valueArr, g = b.pSumArr, i = b.nSumArr, k = b.pNullArr, l = b.nNullArr, j = b.isLastNull, p = b.isLastPSumNull, n = b.isLastNSumNull, w = this.numDisplaySets, H = b.currentIdx, m = b.pValueMap, o = b.nValueMap, q = w
							- 1, w = e % w;
					if (e > H) {
						if (j)
							j = H - d.lastNullIdx, f.push(j), d.lastNullIdx = H, j = H
									- d.lastNSumNullIdx, l.push(j), d.lastNSumNullIdx = H, j = H
									- d.lastPSumNullIdx, k.push(j), d.lastPSumNullIdx = H;
						else {
							if (n)
								j = H - d.lastNSumNullIdx, l.push(j), d.lastNSumNullIdx = H;
							if (p)
								j = H - d.lastPSumNullIdx, k.push(j), d.lastPSumNullIdx = H
						}
						n = p = j = !0;
						H >= q
								&& (f[0] === 0 && f.shift() || h.shift(), f[0]
										&& (f[0] -= 1) && d.lastNullIdx
										&& (d.lastNullIdx -= 1), k[0] === 0
										&& k.shift() || g.shift(), k[0]
										&& (k[0] -= 1) && d.lastPSumNullIdx
										&& (d.lastPSumNullIdx -= 1), l[0] === 0
										&& l.shift() || i.shift(), l[0]
										&& (l[0] -= 1) && d.lastNSumNullIdx
										&& (d.lastNSumNullIdx -= 1), delete m[w], delete o[w])
					}
					c !== null
							&& (j = !1, this.isStacked
									? c > 0 ? !m[w] && m[w] !== 0
											&& (m[w] = c, p = !1) : !o[w]
											&& o[w] !== 0 && (o[w] = c, n = !1)
									: n = p = !1, e > H
									? this.isStacked
											? (h.push(c), c > 0
													? (g.push(c), m[w] = c, p = !1)
													: (i.push(c), o[w] = c, n = !1))
											: (o[w] = c, m[w] = c, g.push(c), i
													.push(c))
									: this.isStacked
											? c > 0 ? p
													? (g.push(c), p = !1)
													: g[g.length - 1] += c : n
													? (i.push(c), p = !1)
													: i[i.length - 1] += c
											: (!m[w] && m[w] !== 0
													? (m[w] = c, g.push(c))
													: c > m[w]
															&& (m[w] = g[g.length
																	- 1] = c), !o[w]
													&& o[w] !== 0
													? (o[w] = c, i.push(c))
													: c < o[w]
															&& (o[w] = i[i.length
																	- 1] = c)));
					b.currentIdx = e;
					b.isLastNull = j;
					b.isLastPSumNull = p;
					b.isLastNSumNull = n;
					e = h.concat(g).concat(i);
					c = Math.max.apply(Math, e);
					e = Math.min.apply(Math, e);
					a.max = c;
					a.min = e
				}
			},
			realtimeUpdate : function(a, c) {
				var b = this.hcJSON, d = this.dataObj, e = d.chart, f = b[V], h = this.numberFormatter, g = f.x, i = g._labelY, k = g._labelX, l = g._yShipment, C = g._isStagger, p = g._rotation, n = g._textAlign, w = g._adjustedPx, m = g._staggerLines, o = g._labelHeight, A, q = f.axisGridManager, x = g.catCount, r = this.hcInstance, s = this.chartInstance, t = s.jsVars, I = t.$overlayButton, z = a.values, v = a.labels
						|| [], G = a.showLabels || [], F = a.colors, O = a.toolTexts, M = a.links, y, B, N, L, K = a.vlines, J = a.dimension > x
						? x
						: a.dimension, R, Q, T, U, ga, S, pa, ea, la = b.xAxis;
				U = d.chart.showlabels == "0";
				var Y = b.chart.showRealtimeValue;
				ga = x - J;
				var Z;
				S = d.categories;
				var fa = t._reflowData;
				pa = [];
				T = j(f._startIndex, 0);
				var da = g.stepValue;
				a.clear && this.realtimeUpdate({
							dimension : this.numDisplaySets,
							values : [],
							labels : []
						}, a.dimension > 0);
				if (a.dimension) {
					b.plotOptions.series.animation = !1;
					K
							? (y = a.vlineColors || [], B = a.vlineLabels || [], N = a.vlineThickness
									|| [], L = a.vlinedashed || [])
							: K = [];
					if (!S)
						S = d.categories = [];
					if (S[0]) {
						if (!S[0].category)
							S[0].category = []
					} else
						S[0] = {
							category : []
						};
					S = S[0].category;
					pa = Ia(la.plotLines, -J, -0.5);
					for (g = pa.length; g--;) {
						if ((Z = pa[g]).label)
							R = Z.label, R.text = G[g] === "0" || U
									? ""
									: D(v[g] || E), A = ga + g, Z.value = A, Q = x
									+ g + T, (A = Q % da === 0)
									? (R.style = la.labels.style, R.y = C ? i
											+ Q / da % m * o : l, R.x = k
											+ (p ? w : 0), R.rotation = p, R.textAlign = n)
									: R.style = la.steppedLabels.style, la.plotLines
									.push(Z), S.shift(), S.push({
										label : R.text
									});
						K[g] === "1" && q.addVline(la, {
									color : y[g] && decodeURIComponent(y[g]),
									label : B[g] && decodeURIComponent(B[g]),
									thickness : N[g]
											&& decodeURIComponent(N[g]),
									dashed : L[g] && decodeURIComponent(L[g])
								}, ga + g, b)
					}
					f._startIndex = (J + T) % (C ? da * m : da);
					g = b.series && b.series.length;
					J && f.oriCatTmp.splice(0, J);
					for (f._skipValueWatcher = !1; g--;) {
						L = b.series[g];
						U = z && z[g] || [];
						ga = F && F[g] || [];
						S = M && M[g] || [];
						pa = O && O[g] || [];
						G = L.yAxis || 0;
						y = f._rtCounter || (f._rtCounter = 1);
						K = L.data;
						B = K.length - J;
						q = K.length;
						for (N = 0; B < q; B += 1, N += 1)
							ea = h.getCleanValue(decodeURIComponent(u(U[N],
									null))), T = decodeURIComponent(v[N] || ""), f.oriCatTmp[B] = T, K
									.shift(), T = L._dataParser({
										label : T,
										color : ga && ga[N]
												&& decodeURIComponent(ga[N]),
										link : S && S[N]
												&& decodeURIComponent(S[N]),
										tooltext : pa && pa[N]
												&& decodeURIComponent(pa[N])
									}, B, ea), T.y = ea, K.push(T), this
									.pointValueWatcher(b, ea, G, null, y);
						Y && (f.realtimeValues[g] = h.dataLabels(ea, L.yAxis))
					}
					f._rtCounter += J;
					if (Y)
						la.title.text = this.prepareRealtimeValueText();
					h = b.yAxis[0];
					z = f[0];
					M = j(this.isStacked ? 0 : this.setAdaptiveYMin,
							e.setadaptiveymin, 0);
					F = v = !M;
					O = (h.max - h.min) / 4;
					if (f.isDual) {
						if (z.max > h.max || z.min < h.min
								|| !(F && h.min === 0) && h.min !== f._userPMin
								&& z.min - h.min > O || !(v && h.max === 0)
								&& h.max !== f._userPMax && h.max - z.max > O)
							t._forceReflow = !0, f._skipValueWatcher = !0;
						h = b.yAxis[1];
						z = f[1];
						F = v = !j(e.setadaptivesymin, M);
						O = (h.max - h.min) / 4;
						if (z.max > h.max || z.min < h.min
								|| !(F && h.min === 0) && h.min !== f._userSMin
								&& z.min - h.min > O || !(v && h.max === 0)
								&& h.max !== f._userSMax && h.max - z.max > O)
							t._forceReflow = !0, f._skipValueWatcher = !0
					} else if (z.max > h.max || z.min < h.min
							|| !(F && h.min === 0) && h.min !== f._userMin
							&& z.min - h.min > O || !(v && h.max === 0)
							&& h.max !== f._userMax && h.max - z.max > O)
						t._forceReflow = !0, f._skipValueWatcher = !0;
					if (e = r._chartBGImageGroup) {
						delete e.renderer;
						b.chart._chartBGImageGroup = e;
						e = r._chartBGImage || [];
						g = 0;
						for (q = e.length; g < q; g += 1)
							delete e[g].renderer;
						b.chart._chartBGImage = e
					}
					if (e = r._chartLogoImageGroup) {
						delete e.renderer;
						b.chart._chartLogoImageGroup = e;
						if (e = r._logoTracker)
							delete e.renderer, b.chart._logoTracker = e;
						if (e = r._chartLogoImage)
							delete e.renderer, b.chart._chartLogoImage = e
					}
					fa.hcJSON
							&& (e = fa.hcJSON[V], delete fa.hcJSON[V], aa(
									b.series, fa.hcJSON.series, !0), fa.hcJSON[V] = e, e = null);
					aa(fa, {
								preReflowAdjustments : function() {
									this.dataObj.categories = d.categories
								},
								postReflowAdjustments : function() {
									this.hcJSON.xAxis.plotLines = la.plotLines;
									this.hcJSON.series = b.series
								},
								postHCJSONCreation : function(a) {
									aa(a, {
												_FCconf : {
													0 : {
														min : f[0].min,
														max : f[0].max
													},
													1 : {
														min : f[1].min,
														max : f[1].max
													},
													_skipValueWatcher : !0,
													realtimeValues : f.realtimeValues,
													rtvHTMLWrapper : f.rtvHTMLWrapper
												}
											}, !0)
								},
								hcJSON : {
									_FCconf : {
										_userMax : f._userMax,
										_userMin : f._userMin,
										_userPMax : f._userPMax,
										_userSMax : f._userSMax,
										_userPMin : f._userPMin,
										_userSMin : f._userSMin,
										_chartState : f._chartState,
										_rtCounter : f._rtCounter,
										_startIndex : f._startIndex,
										oriCatTmp : f.oriCatTmp,
										x : {
											catCount : x,
											_labelY : i,
											_labelX : k,
											_yShipment : l,
											_isStagger : C,
											_rotation : p,
											_textAlign : n,
											_adjustedPx : w,
											_staggerLines : m,
											_labelHeight : o
										}
									}
								}
							}, !0);
					if (!c)
						t._forceReflow
								? (t._forceReflow = !1, s.resizeTo())
								: this.draw(b, function(a) {
									t.hcObj = a;
									a.hasRendered
											&& (t.overlayButtonActive
													&& I
													&& (I
															.text(t.overlayButtonMessage), a.container
															.appendChild(I[0])), r.destroy
													&& r.destroy())
								})
				}
			},
			extractTrendLines : function(a) {
				for (var c = a.plotLines, a = a.plotBands, b, d = c.length, e = [], f = []; d;)
					b = d - 1, b = c[b], b.isTrend && f.push(b), d -= 1;
				for (d = a.length; d;)
					b = d - 1, c = a[b], c.isTrend && e.push(c), d -= 1;
				return {
					trendLines : f,
					trendBands : e
				}
			}
		};
		Ha(r.eiMethods, {
			clearChart : function(a) {
				a = a && a.toString && a.toString();
				this.feedData("clear=1");
				B.raiseEvent("ChartCleared", {
							source : a
						}, this, [this.id, a])
			},
			getDataJSON : function() {
				return this.jsVars._rtLastUpdatedData || {
					values : []
				}
			},
			getData : function() {
				var a = this.jsVars, c = a.hcObj, a = a.instanceAPI.hcJSON[V].oriCatTmp, b, d = [], e, f, h, g;
				if (!c || !c.series)
					return d;
				c = c.series;
				e = [];
				for (h = c.length; h--;) {
					b = c[h];
					e[b.index] = b.name;
					f = b.data;
					for (g = a.length; g--;)
						b = d[g] || (d[g] = [a[g]]), b[h + 1] = f[g].y
				}
				e.unshift(null);
				d.unshift(e);
				return d
			}
		});
		t("realtimearea", Ha({
							standaloneInit : !0,
							multisetRealtime : !0,
							defaultPlotShadow : 1,
							creditLabel : Z
						}, r), t.msareabase);
		t("realtimecolumn", Ha({
							standaloneInit : !0,
							multisetRealtime : !0,
							creditLabel : Z
						}, r), t.mscolumn2dbase);
		t("realtimeline", Ha({
							standaloneInit : !0,
							multisetRealtime : !0,
							creditLabel : Z
						}, r), t.mslinebase);
		t("realtimelinedy", Ha({
							standaloneInit : !0,
							multisetRealtime : !0,
							isDual : !0,
							creditLabel : Z,
							series : t.mscombibase
						}, r), t.mslinebase);
		t("realtimestackedarea", {
					isStacked : !0,
					showSum : 0,
					creditLabel : Z
				}, t.realtimearea);
		t("realtimestackedcolumn", {
					isStacked : !0,
					creditLabel : Z
				}, t.realtimecolumn);
		var hb = function(a, c) {
			return a.minvalue - c.minvalue
		};
		va.prototype = {
			getColorObj : function(a) {
				for (var c = this.colorArr, b = 0, d = c.length, e, f, h = {}; b < d; b += 1) {
					h.index = b;
					e = c[b];
					f = c[b + 1];
					if (a < e.minvalue)
						return h.nextObj = e, h;
					if (a >= e.minvalue && a <= e.maxvalue) {
						h.colorObj = e;
						if (f && a == f.minvalue)
							h.nextObj = f, h.isOnMeetPoint = !0;
						return h
					}
					h.prevObj = e
				}
				h.index = b - 1;
				return h
			},
			getColorRangeArr : function(a, c) {
				var b, d = this.colorArr, e, f, h = [], g, i;
				if (!this.defaultAsigned
						&& (a > c && (b = a, a = c, c = b), a < c
								&& (e = this.getColorObj(a), f = this
										.getColorObj(c), e && f))) {
					b = a;
					e = e.index;
					for (f = f.index; e <= f; e += 1) {
						g = aa({}, d[e]);
						if (g.minvalue !== b)
							g.minvalue = b;
						h.push(g);
						i = g;
						b = g.maxvalue
					}
					i.maxvalue = c
				}
				return h
			}
		};
		va.prototype.constructor = va;
		var nb = function() {
			var a = {
				y : !0,
				R1 : !0,
				R2 : !0,
				h : !0,
				r3dFactor : !0,
				color : !0,
				alpha : !0,
				fill : !0,
				stroke : !0,
				strokeColor : !0,
				strokeAlpha : !0,
				"stroke-width" : !0
			}, c = function(a, b, c, d, i, k, l, j, p, n) {
				if (sa(a))
					b = a.y, c = a.R1, d = a.R2, i = a.h, k = a.r3dFactor, l = a.is2D, n = a.isHollow, p = a.isFunnel, j = a.renderer, a = a.x;
				var w = a - c, m = a + c, o = a - d, A = a + d, q = b + i, x;
				if (l) {
					if (x = {
						silhuette : ["M", w, b, "L", m, b, A, q, o, q, "Z"]
					}, !p)
						x.lighterHalf = ["M", w, b, "L", a, b, a, q, o, q, "Z"], x.darkerHalf = [
								"M", a, b, "L", m, b, A, q, a, q, "Z"]
				} else if (p) {
					w = c || 0.01;
					o = d || 0.01;
					m = n;
					A = j;
					i = b + i;
					q = w * k;
					k *= o;
					var c = Math.pow(o, 2) - Math.pow(w, 2), d = -2
							* (Math.pow(o, 2) * b - Math.pow(w, 2) * i), n = Math
							.sqrt(Math.pow(d, 2)
									- 4
									* c
									* (Math.pow(w * k, 2) + Math.pow(o * b, 2)
											- Math.pow(o * q, 2) - Math.pow(w
													* i, 2))), j = (-d + n)
							/ (2 * c), c = (-d - n) / (2 * c), r;
					j < i && j > b ? r = c : c < i && c > b && (r = j);
					j = Math.sqrt((Math.pow(r - b, 2) - Math.pow(q, 2))
							/ Math.pow(w, 2));
					c = -j;
					c = {
						topLeft : {
							x : Math.round(Math.pow(w, 2) * c / (r - b) * 100)
									/ 100,
							y : Math
									.round((Math.pow(q, 2) / (r - b) + b) * 100)
									/ 100
						},
						bottomLeft : {
							x : Math.round(Math.pow(o, 2) * c / (r - i) * 100)
									/ 100,
							y : Math
									.round((Math.pow(k, 2) / (r - i) + i) * 100)
									/ 100
						},
						topRight : {
							x : Math.round(Math.pow(w, 2) * j / (r - b) * 100)
									/ 100,
							y : Math
									.round((Math.pow(q, 2) / (r - b) + b) * 100)
									/ 100
						},
						bottomRight : {
							x : Math.round(Math.pow(o, 2) * j / (r - i) * 100)
									/ 100,
							y : Math
									.round((Math.pow(k, 2) / (r - i) + i) * 100)
									/ 100
						}
					};
					for (x in c)
						if (isNaN(c[x].x) || isNaN(c[x].y))
							c[x].x = x == "topLeft" || x == "bottomLeft"
									? -w
									: w, c[x].y = b;
					d = c.topLeft;
					n = c.bottomLeft;
					x = a + d.x;
					r = a + c.topRight.x;
					var j = a + n.x, c = a + c.bottomRight.x, d = d.y, p = n.y, n = A
							.getArcPath(a, b, x, d, r, d, w, q, 0, 0), l = A
							.getArcPath(a, b, x, d, r, d, w, q, 1, 1), s = A
							.getArcPath(a, i, c, p, j, p, o, k, 1, 0), o = A
							.getArcPath(a, i, c, p, j, p, o, k, 0, 1), o = {
						front : ["M", x, d].concat(n, ["L", c, p], s, ["Z"]),
						back : ["M", x, d].concat(l, ["L", c, p], o, ["Z"]),
						silhuette : ["M", x, d]
								.concat(l, ["L", c, p], s, ["Z"])
					};
					if (!m)
						o.top = ["M", x, d].concat(n, ["L", r, d], A
										.getArcPath(a, b, r, d, x, d, w, q, 0,
												1), ["Z"]);
					x = o
				} else
					x = c * k, r = d * k, i = Xa(5, c), j = Xa(2, 2 * x), c = Xa(
							2, j), k = c / k, x = {
						top : ["M", w, b, "L", a, b + x, m, b, a, b - x, "Z"],
						front : ["M", w, b, "L", a, b + x, m, b, A, q, a,
								q + r, o, q, "Z"],
						topLight : ["M", w, b + 0.5, "L", a, b + x + 0.5, a,
								b + x - j, w + k, b, "Z"],
						topLight1 : ["M", m, b + 0.5, "L", a, b + x + 0.5, a,
								b + x - c, m - k, b, "Z"],
						silhuette : ["M", w, b, "L", a, b - x, m, b, A, q, a,
								q + r, o, q, "Z"],
						centerLight : ["M", a, b + x, "L", a, q + r, a - 5,
								q + r, a - i, b + x, "Z"],
						centerLight1 : ["M", a, b + x, "L", a, q + r, a + 5,
								q + r, a + i, b + x, "Z"]
					};
				return x
			}, b = function(b, d) {
				var h, g, i = this, k, l, C = !1, p = !1, n = this._3dAttr;
				xa(b) && T(d) && (h = b, b = {}, b[h] = d);
				if (xa(b))
					i = a[b] ? this._3dAttr[b] : this._attr(b);
				else {
					for (h in b)
						if (g = b[h], a[h])
							if (n[h] = g, h === "fill")
								g && g.linearGradient && g.stops && g.stops[0]
										&& (g = g.stops[0][1]), Sa.test(g)
										? (l = La(g), k = l.get("hex"), l = l
												.get("a")
												* 100)
										: g && g.FCcolor
												? (k = g.FCcolor.color.split(q)[0], l = g.FCcolor.alpha
														.split(q)[0])
												: Pa.test(g)
														&& (k = g.replace(Fa,
																Ja), l = j(
																n.alpha, 100)), n.color = k, n.alpha = l, p = !0;
							else if (h === "color" || h === "alpha")
								n.fill = G(n.color, j(n.alpha, 100)), p = !0;
							else if (h === "stroke" || h === "strokeColor"
									|| h === "strokeAlpha") {
								if (n.is2D)
									h === "stroke"
											? (g && g.linearGradient && g.stops
													&& g.stops[0]
													&& (g = g.stops[0][1]), Sa
													.test(g)
													? (l = La(g), k = l
															.get("hex"), l = l
															.get("a")
															* 100)
													: g && g.FCcolor
															? (k = g.FCcolor.color
																	.split(q)[0], l = g.FCcolor.alpha
																	.split(q)[0])
															: Pa.test(g)
																	&& (k = g
																			.replace(
																					Fa,
																					Ja), l = j(
																			n.alpha,
																			100)), n.strokeColor = k, n.strokeAlpha = l)
											: n.stroke = G(n.strokeColor, j(
															n.strokeAlpha, 100)), n.isFunnel
											? this.funnel2D.attr("stroke",
													n.stroke)
											: this.borderElement.attr("stroke",
													n.stroke)
							} else
								h === "stroke-width" ? n.is2D
										&& (n.isFunnel ? this.funnel2D.attr(h,
												g) : this.borderElement.attr(h,
												g)) : C = !0;
						else
							this._attr(h, g);
					if (n.is2D)
						C
								&& (Shapeargs = c(n.x, n.y, n.R1, n.R2, n.h,
										n.r3dFactor, n.is2D), i.shadowElement
										.attr({
													d : Shapeargs.silhuette
												}), n.isFunnel ? i.funnel2D
										.attr({
													d : Shapeargs.silhuette
												}) : (i.lighterHalf.attr({
											d : Shapeargs.lighterHalf
										}), i.darkerHalf.attr({
											d : Shapeargs.darkerHalf
										}), i.borderElement.attr({
											d : Shapeargs.silhuette
										}))), p
								&& (n.isFunnel
										? i.funnel2D.attr("fill", G(n.color, j(
																n.alpha, 100)))
										: (k = K(n.color, 80), l = S(n.color,
												80), i.lighterHalf.attr("fill",
												G(l, j(n.alpha, 100))), i.darkerHalf
												.attr("fill", G(k, j(n.alpha,
																		100)))));
					else if (C
							&& (Shapeargs = c(n.x, n.y, n.R1, n.R2, n.h,
									n.r3dFactor, n.is2D), i.shadowElement.attr(
									"d", Shapeargs.silhuette), n.isFunnel
									? (i.front.attr("d", Shapeargs.front), i.back
											.attr("d", Shapeargs.back), i.top
											&& Shapeargs.top
											&& i.top.attr("d", Shapeargs.top))
									: (i.front.attr("d", Shapeargs.front), i.top
											.attr("d", Shapeargs.top), i.topLight
											.attr("d", Shapeargs.topLight), i.topLight1
											.attr("d", Shapeargs.topLight1), i.centerLight
											.attr("d", Shapeargs.centerLight), i.centerLight1
											.attr("d", Shapeargs.centerLight1))), p)
						if (k = n.color, l = n.alpha, n.isFunnel)
							h = S(k, 60), p = K(k, 60), i.back.attr("fill", {
										FCcolor : {
											color : p + q + h + q + k,
											alpha : l + q + l + q + l,
											ratio : "0,60,40",
											angle : 0
										}
									}), i.front.attr("fill", {
										FCcolor : {
											color : k + q + h + q + p,
											alpha : l + q + l + q + l,
											ratio : "0,40,60",
											angle : 0
										}
									}), i.top && i.top.attr("fill", {
										FCcolor : {
											color : h + q + p,
											alpha : l + q + l,
											ratio : "0,100",
											angle : -65
										}
									});
						else {
							h = S(k, 80);
							C = S(k, 70);
							p = K(k, 80);
							g = "0," + l;
							var w = k + q + C, n = 5 / (n.R1 * n.r3dFactor)
									* 100;
							i.centerLight.attr("fill", {
										FCcolor : {
											color : w,
											alpha : g,
											ratio : "0,100",
											angle : 0
										}
									});
							i.centerLight1.attr("fill", {
										FCcolor : {
											color : w,
											alpha : g,
											ratio : "0,100",
											angle : 180
										}
									});
							i.topLight.attr("fill", {
										FCcolor : {
											color : C + q + C + q + k + q + k,
											alpha : l + q + l + q + 0 + q + 0,
											ratio : "0,50," + n + q + (50 - n),
											angle : -45
										}
									});
							i.topLight1.attr("fill", {
										FCcolor : {
											color : C + q + k + q + p,
											alpha : l + q + l + q + l,
											ratio : "0,50,50",
											angle : 0
										}
									});
							i.front.attr("fill", {
										FCcolor : {
											color : k + q + k + q + p + q + p,
											alpha : l + q + l + q + l + q + l,
											ratio : "0,50,0,50",
											angle : 0
										}
									});
							i.top.attr("fill", {
										FCcolor : {
											color : h + q + k + q + p + q + p,
											alpha : l + q + l + q + l + q + l,
											ratio : "0,25,30,45",
											angle : -45
										}
									})
						}
				}
				return i
			}, d = function() {
				var a = this.shadowElement;
				d && a.shadow.apply(a, arguments)
			};
			return function(a, f, h, g, i, k, l, C, p, n, w) {
				if (sa(a))
					f = a.y, h = a.R1, g = a.R2, i = a.h, k = a.r3dFactor, l = a.gStr, C = a.is2D, p = a.renderer, w = a.isHollow, n = a.isFunnel, a = a.x;
				k = j(k, 0.15);
				a = {
					x : a,
					y : f,
					R1 : h,
					R2 : g,
					h : i,
					r3dFactor : k,
					is2D : C,
					isHollow : w,
					isFunnel : n,
					renderer : p
				};
				f = c(a);
				l = p.g(l);
				l.Shapeargs = f;
				l.shadowElement = p.path(f.silhuette).attr({
							fill : Ma
						}).add(l);
				l._attr = l.attr;
				l.attr = b;
				l.shadow = d;
				l._3dAttr = a;
				if (n)
					if (C)
						l.funnel2D = p.path(f.silhuette).add(l);
					else {
						if (l.back = p.path(f.back).attr({
									"stroke-width" : 0
								}).add(l), l.front = p.path(f.front).attr({
									"stroke-width" : 0
								}).add(l), f.top)
							l.top = p.path(f.top).attr({
										"stroke-width" : 0
									}).add(l)
					}
				else
					C ? (l.lighterHalf = p.path(f.lighterHalf).attr({
								"stroke-width" : 0
							}).add(l), l.darkerHalf = p.path(f.darkerHalf)
							.attr({
										"stroke-width" : 0
									}).add(l), l.borderElement = p
							.path(f.silhuette).attr({
										fill : Ma
									}).add(l)) : (l.front = p.path(f.front)
							.attr({
										"stroke-width" : 0
									}).add(l), l.centerLight = p
							.path(f.centerLight).attr({
										"stroke-width" : 0
									}).add(l), l.centerLight1 = p
							.path(f.centerLight1).attr({
										"stroke-width" : 0
									}).add(l), l.top = p.path(f.top).attr({
								"stroke-width" : 0
							}).add(l), l.topLight = p.path(f.topLight).attr({
								"stroke-width" : 0
							}).add(l), l.topLight1 = p.path(f.topLight1).attr({
								"stroke-width" : 0
							}).add(l));
				return l
			}
		}();
		Y.funnel = ia(Y.pie, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.pie.prototype.pointClass, {
			slice : function(a, c) {
				var b = this.series, d = b.options.SlicingDistance / 2, e, f, a = this.sliced = T(a)
						? a
						: !this.sliced;
				e = {
					hcJSON : {
						series : []
					}
				};
				e.hcJSON.series[b.index] = {
					data : []
				};
				if (a) {
					if (b.lastSlicedPoint)
						e.hcJSON.series[b.index].data[b.lastSlicedPoint.index] = {
							isSliced : !1
						}, b.lastSlicedPoint.sliced = !1;
					else
						for (f = b.data.length; f--;)
							e.hcJSON.series[b.index].data[f] = {
								isSliced : !1
							};
					b.lastSlicedPoint = this
				} else
					b.lastSlicedPoint = void 0;
				var h = {
					translateY : a ? -d : 0
				}, g = {
					translateY : a ? d : 0
				}, i = 0, k = b.data, l = k.length;
				e.hcJSON.series[b.index].data[this.index] = {
					isSliced : a || !1
				};
				aa(
						b.chart.options.instanceAPI.chartInstance.jsVars._reflowData,
						e, !0);
				lb(c, !0);
				for (f = 0; f < l; f += 1)
					e = k[f], e.graphic
							&& (e.x < this.x
									? (b = h, i += 1)
									: b = e.x == this.x ? i ? f == l - 1 ? {
										translateY : a ? d / 2 : 0
									} : {
										translateY : 0
									} : {
										translateY : a ? -d / 2 : 0
									} : g, e.graphic.animate(b), e.dataLabelElement
									&& e.dataLabelElement.animate(b), e.tracker
									&& e.tracker.animate(b))
			}
		});
		r = J.extendClass(U.pie, {
			type : "funnel",
			pointClass : r,
			translate : function() {
				var a = this.data, c = this.chart, b = this.options, d = c.plotWidth
						/ 2, e = c.plotHeight, f = a.length - 1, h = a[f].y, g = a[0].y, i, k, l, C, p = 0, n = b.yScale, w = b.isHollow, o = b.is2d, m = 0, A = c.renderer, q = {}, x = b.streamlinedData, r = this.options.labelDistance, s = 0.8
						/ e, t, I = 0, z = b.showLabelsAtCenter;
				j(parseInt(b.dataLabels.style.lineHeight), 12);
				var v = j(parseInt(b.dataLabels.style.fontSize), 10) * 0.3;
				i = x ? e / (g - h) : e / g;
				k = d;
				Ka(a, function(c, e) {
					if (e) {
						if (c.isSliced)
							t = c.x, t > 1 && !q[t] && (q[t] = !0, I += 1), t < f
									&& (q[t + 1] = !0, I += 1);
						x
								? (l = b.useSameSlantAngle == 1
										? d * c.y / g
										: d * Math.sqrt(c.y / g), C = i
										* (a[e - 1].y - c.y))
								: (m += C = i * a[e].y, l = d * (1 - m * s));
						c.shapeArgs = {
							x : d,
							y : p,
							R1 : k,
							R2 : l,
							h : C,
							r3dFactor : n,
							isHollow : w,
							gStr : "point",
							is2D : o,
							renderer : A,
							isFunnel : !0
						};
						z
								? (c.labelAline = "center", c.labelX = d, c.labelY = (o
										? p
										: p + n * k)
										+ C / 2 + v)
								: (c.labelAline = "left", c.labelX = d + r + l
										+ 3, c.labelY = p + v + C);
						p += C;
						k = l
					} else
						l = b.useSameSlantAngle == 1 ? d * a[0].y / g : d
								* Math.sqrt(a[0].y / g), c.labelWidht > l * 2
								? (c.labelAline = "left", c.labelX = 0)
								: (c.labelAline = "center", c.labelX = d), c.labelY = (o
								? p
								: p - n * k)
								- v - 3;
					c.plotX = d;
					c.plotY = p
				});
				this._temp = {
					slicingGapPosition : q,
					noOfGap : I
				}
			},
			drawPoints : function() {
				var a = this.data, c = a.length - 1, b, d = this._temp || {}, e = d.slicingGapPosition, d = d.noOfGap;
				b = this.options.SlicingDistance;
				var f, h = b / 2, g = 0;
				d && (f = Math.min(h * 1.5, b / d), g = h);
				for (; c >= 0; c -= 1)
					if (b = a[c], b.shapeArgs) {
						if (!b.graphic)
							b.graphic = nb(b.shapeArgs);
						b.graphic.attr({
									color : b.color,
									alpha : b.alpha,
									"stroke-width" : b.borderWidth,
									stroke : b.borderColor
								}).add(this.group).shadow(b.shadow.apply,
								void 0, b.shadow);
						if (d) {
							if (g)
								b.graphic.attr({
											translateY : g
										}), b._startTranslateY = g;
							e[b.x] && (g -= f)
						}
					}
			},
			drawDataLabels : function() {
				var a = this.data, c = this.chart, b = this.options.dataLabels, d = this.dataLabelsGroup, e, f, h, g = c.renderer, i = this.options.showLabelsAtCenter, k = {
					"stroke-width" : b.connectorWidth,
					stroke : b.connectorColor
				}, l = Number(b.style.lineHeight.split(/px/)[0]), C = j(
						parseInt(b.style.fontSize), 10)
						* 0.3, p = {}, n, o, m, q, A, r = this.options.labelDistance, x, s;
				if (!d)
					d = this.dataLabelsGroup = g.g("data-labels").attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : 6
							}).translate(c.plotLeft, c.plotTop).add(), c.options.chart.hasScroll
							&& d.clip(this.clipRect);
				for (q = a.length - 1; q >= 0; q -= 1)
					A = a[q], e = A.labelY, c = A.labelX, f = A.labelAline, i
							? A.dataLabelElement = g.text(A.displayValue, c, e)
									.attr({
												align : f,
												translateY : A._startTranslateY
														|| 0
											}).css(b.style).add(A.graphic
											? d
											: p.graphic)
							: (m = h = e - C, n !== void 0 && o !== void 0
									&& o - h < l && (m = o - l, e = m + C), n = A.plotY, o = m, typeof A.displayValue !== "undefined"
									&& A.displayValue !== E
									&& !(q === 0 && this.type == "funnel")
									&& (x = c - 3, s = x - r, h = ["M", s, h,
											"L", x, m], h = g.crispLine(h,
											b.connectorWidth), g.path(h)
											.attr(k).add(A.graphic || d)), g
									.text(A.displayValue, c, e).attr({
												align : f
											}).css(b.style).add(A.graphic
											|| p.graphic || d)), p = A
			},
			drawTracker : function() {
				for (var a = this, c = a.chart, b = c.renderer, d, e, f = +new Date, h = (d = a.options.cursor)
						&& {
							cursor : d
						}, g = a.data.length - 1, i, k; g >= 0; g -= 1)
					if (i = a.data[g], e = i.tracker, i.graphic)
						d = i.graphic.Shapeargs.silhuette, e
								? e.attr(d)
								: (e = i.link !== void 0 ? {
									cursor : "pointer",
									_cursor : "hand"
								} : h, i.tracker = b.path(d).attr({
											isTracker : f,
											fill : Ma,
											visibility : a.visible
													? ja
													: "hidden",
											zIndex : 1,
											translateY : i._startTranslateY
													|| 0
										}).on(Ba ? "touchstart" : "mouseover",
										function(b) {
											return function(d) {
												k = d.relatedTarget
														|| d.fromElement;
												if (c.hoverSeries !== a
														&& Ga(k, "isTracker") !== f)
													a.onMouseOver();
												b.onMouseOver()
											}
										}(i)).on("mouseout", function(b) {
									if (!a.options.stickyTracking
											&& (k = b.relatedTarget
													|| b.toElement, Ga(k,
													"isTracker") !== f))
										a.onMouseOut()
								}).css(e).add(c.trackerGroup || i.graphic))
			},
			render : function() {
				var d;
				var a, c = this.chart;
				a = c.renderer;
				var b = this.options;
				if (!this.group)
					d = this.group = a.g("series"), a = d, a.attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : b.zIndex
							}).translate(c.plotLeft, c.plotTop)
							.add(c.seriesGroup);
				this.drawPoints();
				this.drawTracker();
				this.drawDataLabels();
				if (this.visible)
					c.currentSeriesIndex = this.index, c.naviigator
							&& placeNaviGator(c);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			},
			animate : function() {
				var a, c, b, d = this.data.length, e = this.options.animation;
				e && !sa(e) && (e = {});
				for (a = 0; a < d; a += 1)
					if ((b = (c = this.data[a]) && c.graphic) && !b.isAnimating)
						b.isAnimating = !0, b.attr({
									alpha : 0,
									strokeAlpha : 0
								}), b.animate({
									alpha : c.alpha,
									strokeAlpha : La(c.borderColor).get("a")
											* 100
								}, e);
				this.animate = null
			}
		});
		U.funnel = r;
		Y.pyramid = ia(Y.funnel, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.funnel, {
			type : "pyramid",
			translate : function() {
				var a = this.data, c = this.chart, b = this.options, d = c.plotWidth
						/ 2, e = c.plotHeight, f, h, g, i, k = c.renderer, l = b.valueSum, C = b.is2d, p = 0, n = 0, o, m = {}, q = 0, A = a.length
						- 1, r = b.yScale, x = this.options.labelDistance, s = b.showLabelsAtCenter, t = j(
						parseInt(b.dataLabels.style.fontSize), 10)
						* 0.3;
				f = e / l;
				h = 0;
				Ka(a, function(a) {
							if (a.isSliced) {
								if ((o = a.x) && !m[o])
									m[o] = !0, q += 1;
								o < A && (m[o + 1] = !0, q += 1)
							}
							p += a.y;
							g = d * p / l;
							i = f * a.y;
							a.shapeArgs = {
								x : d,
								y : n,
								R1 : h,
								R2 : g,
								h : i,
								r3dFactor : r,
								gStr : "point",
								is2D : C,
								renderer : k
							};
							s
									? (a.labelAline = "center", a.labelX = d, a.labelY = (C
											? n
											: n + r * h)
											+ i / 2 + t)
									: (a.labelAline = "left", a.labelX = d + x
											+ (h + g) / 2 + 3, a.labelY = n + t
											+ i / 2);
							n += i;
							a.plotX = d;
							a.plotY = n - i / 2;
							h = g
						});
				this._temp = {
					slicingGapPosition : m,
					noOfGap : q
				}
			}
		});
		U.pyramid = r;
		Y.bulb = ia(Y.pie, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.pie, {
			type : "bulb",
			drawPoints : function() {
				var a, c = this.chart;
				a = c.options.chart;
				var b, d, e = a.gaugeRadius, f = a.gaugeOriginX, h = a.gaugeOriginY;
				b = this.data[0];
				d = b.graphic;
				if (b.y !== void 0 && !isNaN(b.y))
					a = {
						r : e,
						fill : b.color,
						stroke : b.borderColor,
						"stroke-linecap" : "round",
						"stroke-width" : b.borderWidth
					}, b.plotX = f, b.plotY = h, b.radius = e, d ? d.animate({
								x : f,
								y : h,
								r : e
							}) : b.graphic = c.renderer.symbol("circle", f, h,
							e).attr(a).add(this.chart.seriesGroup)
			},
			drawDataLabels : function() {
				var a = this.chart, c = this.options, b = a.options.chart, d = this.data[0], e = this.dataLabelsGroup;
				if (!e)
					e = this.dataLabelsGroup = a.renderer.g("data-labels")
							.attr({
										visibility : this.visible
												? ja
												: "hidden",
										zIndex : 6
									}).add();
				b = b.placeValuesInside ? d.plotY + b.labelLineHeight * 1
						- b.valueTextHeight / 2 : d.plotY + d.radius
						+ b.valuePadding + b.labelLineHeight * 1;
				if (d.y !== void 0 && !isNaN(d.y) && d.displayValue !== E)
					d.dataLabel = a.renderer.text(d.displayValue, d.plotX, b)
							.attr({
										align : "center"
									}).css(c.dataLabels.style).add(e)
			},
			animate : function() {
				var a, c, b = this.options.animation;
				b && !sa(b) && (b = {});
				if ((c = (a = this.data[0]) && a.graphic) && !c.isAnimating)
					c.isAnimating = !0, c.attr({
								r : 0
							}), c.animate({
								r : a.radius
							}, b);
				this.animate = null
			},
			realtimeUpdate : function(a) {
				var c = this.chart, b = c.options, d = b.chart, e = this
						&& this.data && this.data[0], f = {}, h, g = b.instanceAPI.numberFormatter;
				h = b.instanceAPI.getPointColor;
				var i = b.instanceAPI.colorRangeGetter, k = a.values || [], l = a.labels
						|| [], j = a.toolTexts || [], a = a.showLabels || [];
				if (e
						&& (k[0]
								&& (i = i.getColorObj(g.getCleanValue(k[0])), (f = i.isOnMeetPoint
										? i.nextObj
										: i.colorObj)
										|| (f = i.nextObj || i.prevObj), b = d.defaultColors[i.index
										% b.defaultColLen], h = h(m(f.code, b),
										d.gaugeFillAlpha, d.is3D), e.graphic
										.attr({
													fill : h
												})), d = f
								&& d.useColorNameAsValue ? m(f.name, f.label,
								l[0]) : m(l[0], g.dataLabels(k[0])), d !== void 0
								&& (a[0] == 0 && (d = E), e.dataLabel
										&& e.dataLabel.attr({
													text : d
												})), d = m(j[0], g
										.dataLabels(k[0])), d !== void 0))
					e.toolText = d, c.tooltip && c.tooltip.refresh(e, !0)
			},
			drawGraph : function() {
			},
			render : function() {
				var d;
				var a, c = this.chart;
				a = c.renderer;
				var b = this.options;
				if (!this.group)
					d = this.group = a.g("series"), a = d, a.attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : b.zIndex
							}).translate(c.plotLeft, c.plotTop)
							.add(c.seriesGroup);
				this.drawGraph();
				this.drawPoints();
				this.drawTracker();
				this.drawDataLabels();
				if (this.visible)
					c.currentSeriesIndex = this.index, c.naviigator
							&& placeNaviGator(c);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			}
		});
		U.bulb = r;
		Y.led = ia(Y.bulb, {
					states : {
						hover : {}
					}
				});
		var ob = function() {
			var a = {
				value : !0
			}, c = function(b, c) {
				var e, f, h = this, g = this._3dAttr, i;
				xa(b) && T(c) && (e = b, b = {}, b[e] = c);
				if (xa(b))
					h = a[b] ? h._3dAttr[b] : h._attr(b);
				else
					for (e in b)
						if (f = b[e], a[e]) {
							if (f >= g.minValue && f <= g.maxValue) {
								g[e] = f;
								i = (f - g.minValue) / g.perLEDValueLength;
								f = Math.round(i) * g.sizeGapSum - g.ledGap;
								if (g.LEDCase) {
									for (var k = h.colorArr, l = 0, j = k.length, p, n, o, l = 0; l < j; l += 1)
										p = k[l], p.maxLEDNoFrac <= i
												? o = g.LEDLowerFN
												: n
														? o = g.LEDUpperFN
														: (o = void 0, n = p), o
												&& (p[o](), o === "show"
														&& p
																.attr(p.oriShapeArg));
									n || (n = p);
									n.show();
									n.attr(n.hoverShapeArg)
								}
								if (h.darkShade) {
									i = {};
									if (g.isXChange) {
										if (i.width = Math.ceil(g.w - f), g.isIncrement)
											i.x = g.x + f
									} else if (i.height = Math.ceil(g.h - f), g.isIncrement)
										i.y = g.y + f;
									h.darkShade.attr(i)
								}
							}
						} else
							this._attr(e, f);
				return h
			};
			return function(a, d, e, f, h, g, i, k, l, C, p, n, o, q, r, A, s,
					x, t, I) {
				if (sa(a))
					d = a.y, e = a.w, f = a.h, h = a.gStr, g = a.renderer, i = a.value, k = a.gaugeFillColor, l = a.gaugeBorderColor, C = a.gaugeBorderAlpha, p = a.gaugeBorderThickness, n = a.colorRangeManager, o = a.minValue, q = a.maxValue, r = a.useSameFillColor, A = a.useSameFillBgColor, s = a.ledSize, x = a.ledGap, t = a.type, a = a.x;
				i >= o && i <= q || (i = o);
				var k = m(k, "FFFFFF"), l = m(l, "000000").replace(Fa, Ja), C = j(
						C, 1), p = j(p, 2), v = {
					x : a,
					y : d,
					w : e,
					h : f,
					gStr : h,
					renderer : g,
					value : i,
					gaugeFillColor : k,
					gaugeBorderColor : l,
					gaugeBorderAlpha : C,
					gaugeBorderThickness : p,
					colorRangeManager : n,
					minValue : o,
					maxValue : q,
					ledGap : x,
					ledSize : s,
					type : t,
					useSameFillColor : r,
					useSameFillBgColor : A
				}, h = g.g(h);
				h._attr = h.attr;
				h.attr = c;
				h.shadow = I;
				h._3dAttr = v;
				var n = n.getColorRangeArr(o, q), I = a, D = d, z = !0, u = !0, y = t === 2
						|| t === 4 ? f : e, F = x + s, O = x / 2, M = O / 2, B = y
						- s, K = q - o, q = 0, N = n.length, L = 0, J, R = L = 0, E = !1, Q = "show", U = a, S = d, ga = p
						/ 2, pa = a - ga, V = d - ga, la = a + e + ga, ga = d
						+ f + ga;
				r && (R += 1, LEDLOwerFN = "hide");
				A && (R += 2, Q = "hide");
				B < 0 ? (r = 1, s = y) : (r = parseInt(B / F, 10) + 1, s += B
						% F / r, F = s + x);
				A = K / r;
				h.colorArr = [];
				y = [];
				t === 1 ? U += F - x / 2 : t === 2
						? (u = !1, S += F - x / 2)
						: t === 3
								? (I = a + e, z = !1, U += F - x / 2)
								: (D = d + f, u = z = !1, S += F - x / 2);
				v.ledGap = x;
				v.ledSize = s;
				v.sizeGapSum = F;
				v.perLEDValueLength = A;
				v.isIncrement = z;
				v.isXChange = u;
				v.LEDLowerFN = "show";
				v.LEDUpperFN = Q;
				(v.LEDCase = R) && (R === 3 ? J = {
					x : a,
					y : d,
					width : e,
					height : f
				} : E = !0);
				for (h.border = g.path(["M", pa, V, "L", la, V, la, ga, pa, ga,
						"Z"]).attr({
							stroke : G(l, C),
							"stroke-width" : p
						}).add(h); q < N; q += 1)
					if ((l = n[q]) && T(l.maxvalue))
						if (C = Math.round((l.maxvalue - o) / A), s = C - L, L = C, s > 0) {
							p = {
								r : 0
							};
							E && (J = {});
							s *= F;
							if (u) {
								p.y = D;
								p.width = s - x;
								p.height = f;
								z
										? (p.x = I, I += s)
										: (p.x = I - p.width, I -= s);
								if (E)
									J.width = p.x - a, z && R === 1 || !z
											&& R === 2
											? (J.x = a, J.width += p.width)
											: J.width = e - J.width;
								if (q === 0 || q === N - 1) {
									if (p.width += M, z && q === N - 1 || !z
											&& q === 0)
										p.x -= M, p.width = Math.ceil(p.width)
								} else
									p.width += O, p.x -= M
							} else {
								p.x = I;
								p.width = e;
								p.height = s - x;
								z
										? (p.y = D, D += s)
										: (p.y = D - p.height, D -= s);
								if (E)
									J.height = p.y - d, z && R === 1 || !z
											&& R === 2
											? (J.y = d, J.height += p.height)
											: J.height = f - J.height;
								if (q === 0 || q === N - 1) {
									if (p.height += M, z && q === N - 1 || !z
											&& q === 0)
										p.y -= M, p.height = Math
												.ceil(p.height)
								} else
									p.height += O, p.y -= M
							}
							s = g.rect(p).attr({
										"stroke-width" : 0,
										fill : G(m(l.code, "000000"), j(
														l.alpha, 100))
									}).add(h);
							s.oriShapeArg = p;
							s.hoverShapeArg = J;
							s.maxLEDNo = C;
							s.maxLEDNoFrac = (l.maxvalue - o) / A;
							h.colorArr.push(s)
						}
				h.darkShade = g.rect(a, d, e, f, 0).attr({
							"stroke-width" : 0,
							fill : G(k, 50)
						}).add(h);
				for (q = 1; q < r; q += 1)
					u ? (y.push("M", U, S, "L", U, S + f), U += F) : (y.push(
							"M", U, S, "L", U + e, S), S += F);
				h.LEDGap = g.path(y).attr({
							stroke : G(k, 100),
							"stroke-width" : x
						}).add(h);
				h.attr({
							value : i
						});
				return h
			}
		}(), r = J.extendClass(U.bulb, {
			type : "led",
			drawPoints : function() {
				var a = this.chart, c = this.options, b = a.options.scale, d = b.max, e = b.min, f = this.data[0], h = this.chart.options.instanceAPI, g = this.group, i = a.options.chart, k = f.y;
				f.minValue = e;
				f.maxValue = d;
				f.graphic = ob(
						0,
						0,
						a.plotSizeX,
						a.plotSizeY,
						"points-group",
						a.renderer,
						k,
						i.gaugeFillColor,
						i.gaugeBorderColor,
						i.gaugeBorderAlpha,
						i.gaugeBorderThickness,
						h.colorRangeGetter,
						e,
						d,
						i.useSameFillColor,
						i.useSameFillBgColor,
						i.ledSize,
						i.ledGap,
						h.isHorizontal
								? b.reverseScale ? 3 : 1
								: b.reverseScale ? 4 : 2, c.shadow).add(g);
				f.graphic.border
						&& f.graphic.border.shadow(c.shadow, void 0, c.shadow);
				Ua(a.plotWidth, a.plotHeight, a.renderer, this, g)
			},
			realtimeUpdate : function(a) {
				var c = this && this.chart, b = this && this.data
						&& this.data[0], d = this.chart.options.instanceAPI.numberFormatter, e = c.options.plotOptions.series.animation, f = {
					duration : e ? a.interval : 0
				}, h = a.labels || [], g = a.showLabels || [], i = a.toolTexts
						|| [], a = d.getCleanValue((a.values || [])[0]);
				if (b) {
					var k = b.maxValue;
					if (a >= b.minValue
							&& a <= k
							&& (e && $(b.graphic).stop(!0, !0), b.value = a, b.graphic
									.animate({
												value : a
											}, f), e = m(h[0], d.dataLabels(a),
									b.dataLabel && b.dataLabel.textStr), g[0] == 0
									&& (e = ""), b.dataLabel && e !== void 0
									&& b.dataLabel.attr({
												text : e
											}), d = m(i[0], d.dataLabels(a)), d !== void 0))
						b.toolText = d, c.tooltip && c.tooltip.refresh(b, !0)
				}
			},
			drawDataLabels : function() {
				var a = this.chart, c = this.data[0], b = this.dataLabelsGroup, d = a.plotWidth, e = a.plotHeight, f = a.options.chart, h = f.valuePadding, g = this.options.dataLabels, i = g.style, k = parseInt(i.lineHeight), f = j(
						f.yScaleRadius + k * 0.37, 0);
				if (!b)
					b = this.dataLabelsGroup = a.renderer.g("data-labels")
							.translate(a.plotLeft, a.plotTop).attr({
										visibility : this.visible
												? ja
												: "hidden",
										zIndex : 6
									}).add();
				e = e + h + f;
				if (c.y !== void 0 && !isNaN(c.y) && c.displayValue !== E)
					c.dataLabel = a.renderer.text(c.displayValue, d / 2, e)
							.attr({
										align : g.align || za
									}).css(i).add(b), b = c.dataLabel.getBBox(), b.x < 0
							&& (b = b.width - a.plotLeft, a.chartWidth < b
									&& (b = a.chartWidth - a.plotLeft), c.dataLabel
									.attr({
												x : b / 2
											}))
			},
			animate : function(a) {
				var c, b = this.options.animation;
				b && !sa(b) && (b = {});
				if (!a) {
					c = this.data[0];
					var a = c.minValue, d;
					if (c = c && c.graphic)
						d = c.attr("value"), c.attr({
									value : a
								}), c.animate({
									value : d
								}, b)
				}
			},
			render : function() {
				var d;
				var a, c = this.chart;
				a = c.renderer;
				var b = this.options;
				if (!this.group)
					d = this.group = a.g("series"), a = d, a.attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : b.zIndex
							}).translate(c.plotLeft, c.plotTop)
							.add(c.seriesGroup);
				this.drawPoints();
				this.drawTracker();
				this.drawDataLabels();
				if (this.visible)
					c.currentSeriesIndex = this.index, c.naviigator
							&& placeNaviGator(c);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			}
		});
		U.led = r;
		Y.cylinder = ia(Y.bulb, {
					states : {
						hover : {}
					}
				});
		var pb = function() {
			var a = {
				fulidHRatio : !0,
				color : !0,
				alpha : !0,
				fill : !0
			}, c = [], b = function(b, d) {
				var h, g, i = this, k, l, o = !1, p = !1, n = this._3dAttr;
				xa(b) && T(d) && (h = b, b = {}, b[h] = d);
				if (xa(b))
					i = a[b] ? i._3dAttr[b] : i._attr(b);
				else
					for (h in b)
						if (g = b[h], a[h]) {
							if (h === "fill")
								g && g.linearGradient && g.stops && g.stops[0]
										&& (g = g.stops[0][1]), Sa.test(g)
										? (l = La(g), k = l.get("hex"), l = l
												.get("a")
												* 100)
										: g && g.FCcolor
												? (k = g.FCcolor.color.split(q)[0], l = g.FCcolor.alpha
														.split(q)[0])
												: Pa.test(g)
														&& (k = g.replace(Fa,
																Ja)), n.fluidColor = m(
										k, n.fluidColor, "000000"), n.fluidAlpha = j(
										l, n.fluidAlpha, 100), o = !0;
							else if (h === "color")
								n.fluidColor = m(g, n.fluidColor, "000000"), o = !0;
							else if (h === "alpha")
								n.fluidAlpha = j(g, n.fluidAlpha, 100), o = !0;
							else if (g >= 0 && g <= 1)
								n.fulidHRatio = g, p = !0;
							if (o) {
								g = K(n.fluidColor, 70);
								var w = S(n.fluidColor, 70), r = K(n.conColor,
										80), s = S(n.conColor, 80), A;
								l = n.fluidAlpha;
								A = l + q + l;
								i.fluid.attr({
									"stroke-width" : 0,
									fill : {
										FCcolor : {
											gradientUnits : "objectBoundingBox",
											cx : 0.5,
											cy : 0,
											r : "100%",
											color : w + q + g,
											alpha : A,
											ratio : "0,100",
											radialGradient : !0
										}
									}
								});
								i.fluidTop.attr({
									"stroke-width" : 3,
									stroke : G(w, l),
									fill : {
										FCcolor : {
											gradientUnits : "objectBoundingBox",
											cx : 0.5,
											cy : 0.7,
											r : "100%",
											color : w + q + g,
											alpha : A,
											ratio : "0,100",
											radialGradient : !0
										}
									}
								});
								i.btnBorderLight.attr({
											fill : {
												FCcolor : {
													color : s + q + r + q + s
															+ q + s + q + r + q
															+ g + q + r + q + s,
													alpha : "50,50,50,50,50,"
															+ l * 0.7
															+ ",50,50",
													ratio : "0,15,0,12,0,15,43,15",
													angle : 0
												}
											}
										})
							}
							if (p) {
								g = n.x;
								var w = n.r, t = n.fluidStroke / 2, r = g - w, s = g
										+ w;
								A = r + t;
								var x = s - t, v = n.y + n.h, I = v - n.h
										* n.fulidHRatio, W = w * n.r3dFactor, t = w
										- t, D = n.renderer.getArcPath;
								i.fluid.attr({
											d : c.concat(["M", r, v], D(g, v,
															r, v, s, v, w, W,
															0, 0), ["L", s, I],
													D(g, I, s, I, r, I, w, W,
															1, 0), ["Z"])
										});
								i.fluidTop.attr({
											d : c.concat(["M", A, I], D(g, I,
															A, I, x, I, t, W,
															0, 0), ["L", x, I],
													D(g, I, x, I, A, I, t, W,
															0, 0), ["Z"])
										})
							}
						} else
							this._attr(h, g);
				return i
			}, d = function() {
			};
			return function(a, f, h, g, i, k, l, o, p, n, w, r) {
				if (sa(a))
					f = a.y, h = a.r, g = a.h, i = a.r3dFactor, k = a.gStr, l = a.renderer, o = a.fulidHRatio, p = a.conColor, n = a.conAlpha, w = a.fluidColor, r = a.fluidAlpha, a = a.x;
				i = j(i, 0.15);
				o >= 0 && o <= 1 || (o = 0);
				p = m(p, "FFFFFF");
				n = j(n, 30);
				w = m(w, "000000");
				r = j(r, 100);
				r = {
					x : a,
					y : f,
					r : h,
					h : g,
					r3dFactor : i,
					renderer : l,
					fulidHRatio : o,
					conColor : p,
					conAlpha : n,
					fluidStroke : 3,
					fluidColor : w,
					fluidAlpha : r
				};
				n = l.getArcPath;
				k = l.g(k);
				k._attr = k.attr;
				k.attr = b;
				k.shadow = d;
				k._3dAttr = r;
				i *= h;
				var r = h - 1.5, s = f + g, g = s - g * o, o = a - h, A = a + h, t = o
						+ 1.5, x = A - 1.5, I = o - 2, v = A + 2, D = h + 2, u = i
						+ 2, z = s + 4, y = z + 0.0010, B = z + 1, F = K(p, 80), O = K(
						p, 90), p = S(p, 80), M = K(w, 70), w = S(w, 70), J = h
						* 0.85, R = a - J, N = a + J, L = Math.sqrt((1 - J * J
						/ (h * h))
						* i * i), J = f + L, L = s + L, E = f - 1;
				k.btnBorder = l.path(c.concat(["M", I, z], n(a, z, I, z, v, z,
								D, u, 0, 0), ["L", v, y], n(a, y, v, y, I, y,
								D, u, 0, 0), ["Z"])).attr({
							"stroke-width" : 4,
							stroke : G(F, 80)
						}).add(k);
				k.btnBorder1 = l.path(c.concat(["M", o, z], n(a, z, o, z, A, z,
								h, i, 0, 0), ["L", A, y], n(a, y, A, y, o, y,
								h, i, 0, 0), ["Z"])).attr({
							"stroke-width" : 4,
							stroke : G(F, 50)
						}).add(k);
				k.btnBorderLight = l.path(c.concat(["M", o, s], n(a, s, o, s,
								A, s, h, i, 0, 0), ["L", A, B], n(a, B, A, B,
								o, B, h, i, 1, 0), ["Z"])).attr({
					"stroke-width" : 0,
					fill : {
						FCcolor : {
							color : p + q + F + q + p + q + p + q + F + q + M
									+ q + F + q + p,
							alpha : "50,50,50,50,50,70,50,50",
							ratio : "0,15,0,12,0,15,43,15",
							angle : 0
						}
					}
				}).add(k);
				k.back = l.path(c.concat(["M", o, s], n(a, s, o, s, A, s, h, i,
								1, 0), ["L", A, f], n(a, f, A, f, o, f, h, i,
								0, 0), ["Z"])).attr({
					"stroke-width" : 1,
					stroke : G(F, 50),
					fill : {
						FCcolor : {
							color : p + q + F + q + p + q + F + q + O + q + O
									+ q + F + q + p,
							alpha : "30,30,30,30,30,30,30,30",
							ratio : "0,15,43,15,0,12,0,15",
							angle : 0
						}
					}
				}).add(k);
				k.fluid = l.path(c.concat(["M", o, s], n(a, s, o, s, A, s, h,
								i, 0, 0), ["L", A, g], n(a, g, A, g, o, g, h,
								i, 1, 0), ["Z"])).attr({
							"stroke-width" : 0,
							fill : {
								FCcolor : {
									gradientUnits : "objectBoundingBox",
									cx : 0.5,
									cy : 0,
									r : "100%",
									color : w + q + M,
									alpha : "100,100",
									ratio : "0,100",
									radialGradient : !0
								}
							}
						}).add(k);
				k.fluidTop = l.path(c.concat(["M", t, g], n(a, g, t, g, x, g,
								r, i, 0, 0), ["L", x, g], n(a, g, x, g, t, g,
								r, i, 0, 0), ["Z"])).attr({
							"stroke-width" : 3,
							stroke : G(w, 100),
							fill : {
								FCcolor : {
									gradientUnits : "objectBoundingBox",
									cx : 0.5,
									cy : 0.7,
									r : "100%",
									color : w + q + M,
									alpha : "100,100",
									ratio : "0,100",
									radialGradient : !0
								}
							}
						}).add(k);
				k.front = l.path(c.concat(["M", o, s], n(a, s, o, s, A, s, h,
								i, 0, 0), ["L", A, f], n(a, f, A, f, o, f, h,
								i, 1, 0), ["Z"])).attr({
					"stroke-width" : 1,
					stroke : G(F, 50),
					fill : {
						FCcolor : {
							color : p + q + F + q + p + q + p + q + F + q + p
									+ q + F + q + p,
							alpha : "30,30,30,30,30,30,30,30",
							ratio : "0,15,0,12,0,15,43,15",
							angle : 0
						}
					}
				}).add(k);
				k.frontLight = l.path(c.concat(["M", o, s], n(a, s, o, s, R, L,
								h, i, 0, 0), ["L", R, J], n(a, f, R, J, o, f,
								h, i, 1, 0), ["Z"])).attr({
							"stroke-width" : 0,
							stroke : "#" + F,
							fill : {
								FCcolor : {
									color : p + q + F,
									alpha : "40,0",
									ratio : "0,100",
									angle : 0
								}
							}
						}).add(k);
				k.frontLight1 = l.path(c.concat(["M", N, L], n(a, s, N, L, A,
								s, h, i, 0, 0), ["L", A, f], n(a, f, A, f, N,
								J, h, i, 1, 0), ["Z"])).attr({
							"stroke-width" : 0,
							stroke : "#" + F,
							fill : {
								FCcolor : {
									color : p + q + F,
									alpha : "40,0",
									ratio : "0,100",
									angle : 180
								}
							}
						}).add(k);
				k.cylinterTop = l.path(c.concat(["M", o, E], n(a, E, o, E, A,
								E, h, i, 0, 0), ["L", A, E], n(a, E, A, E, o,
								E, h, i, 0, 0), ["Z"])).attr({
							"stroke-width" : 2,
							stroke : G(F, 40)
						}).add(k);
				return k
			}
		}(), r = J.extendClass(U.bulb, {
			type : "cylinder",
			drawPoints : function() {
				var a = this.chart, c = a.options.scale, b = c.max, c = c.min, d = a.options.chart, e = this.data[0], f = (j(
						e.y, c) - c)
						/ (b - c);
				e.minValue = c;
				e.maxValue = b;
				e.fulidHRatio = f;
				e.graphic = pb(d.cylRadius, 0, d.cylRadius, d.cylHeight,
						d.cylYScale, "points-group", a.renderer, f,
						d.cylGlassColor, "100", d.cylFillColor, "100")
						.add(this.group);
				Ua(a.plotWidth, a.plotHeight, a.renderer, this, this.group)
			},
			realtimeUpdate : function(a) {
				var c = this && this.data && this.data[0], b = this.chart, d = b.options.instanceAPI.numberFormatter, e = b.options.plotOptions.series.animation, f = {
					duration : e ? a.interval : 0
				}, h = a.values || [], g = a.labels || [], i = a.showLabels
						|| [], a = a.toolTexts || [];
				if (c) {
					var k = c.minValue, l = c.maxValue, h = d
							.getCleanValue(h[0]), k = (h - k) / (l - k);
					if (h === null || !(k < 0 || k > 1)) {
						e && $(c.graphic).stop(!0, !0);
						c.graphic.animate({
									fulidHRatio : k
								}, f);
						e = m(g[0], d.dataLabels(h));
						d = m(a[0], d.dataLabels(h));
						if (d !== void 0)
							c.toolText = d, b.tooltip
									&& b.tooltip.refresh(c, !0);
						c.dataLabel && e !== void 0
								&& (i[0] == 0 && (e = ""), c.dataLabel.attr({
											text : e
										}))
					}
				}
			},
			drawDataLabels : U.led.prototype.drawDataLabels,
			animate : function() {
				var a, c, b = this.options.animation;
				b && !sa(b) && (b = {});
				if ((c = (a = this.data[0]) && a.graphic) && !c.isAnimating)
					c.isAnimating = !0, c.attr({
								fulidHRatio : 0
							}), c.animate({
								fulidHRatio : a.fulidHRatio
							}, b);
				this.animate = null
			},
			drawTracker : function() {
			},
			render : function() {
				var d;
				var a, c = this.chart;
				a = c.renderer;
				var b = this.options;
				if (!this.group)
					d = this.group = a.g("series"), a = d, a.attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : b.zIndex
							}).translate(c.plotLeft, c.plotTop)
							.add(c.seriesGroup);
				this.drawPoints();
				this.drawTracker();
				this.drawDataLabels();
				if (this.visible)
					c.currentSeriesIndex = this.index, c.naviigator
							&& placeNaviGator(c);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			}
		});
		U.cylinder = r;
		Y.thermometer = ia(Y.bulb, {
					states : {
						hover : {}
					}
				});
		var qb = function() {
			var a = {
				fulidHRatio : !0,
				fluidColor : !0,
				fluidAlpha : !0,
				fluidFill : !0
			}, c = [], b = function(b, d) {
				var h, g, i = this, k, l, o = !1, p = !1, n = this._3dAttr, w = n.renderer.getArcPath;
				xa(b) && T(d) && (h = b, b = {}, b[h] = d);
				if (xa(b))
					i = a[b] ? i._3dAttr[b] : i._attr(b);
				else
					for (h in b)
						if (g = b[h], a[h]) {
							if (h === "fluidFill")
								g && g.linearGradient && g.stops && g.stops[0]
										&& (g = g.stops[0][1]), Sa.test(g)
										? (l = La(g), k = l.get("hex"), l = l
												.get("a")
												* 100)
										: g && g.FCcolor
												? (k = g.FCcolor.color.split(q)[0], l = g.FCcolor.alpha
														.split(q)[0])
												: Pa.test(g)
														&& (k = g.replace(Fa,
																Ja)), n.fluidColor = m(
										k, n.fluidColor, "000000"), n.fluidAlpha = j(
										l, n.fluidAlpha, 100), o = !0;
							else if (h === "fluidColor")
								n.fluidColor = m(g, n.fluidColor, "000000"), o = !0;
							else if (h === "fluidAlpha")
								n.fluidAlpha = j(g, n.fluidAlpha, 100), o = !0;
							else if (g >= 0 && g <= 1)
								n.fulidHRatio = g, p = !0;
							o
									&& (g = K(n.fluidColor, n.is2D ? 80 : 70), i.fluid
											.attr({
														fill : G(g,
																n.fluidAlpha)
													}), i.fluidTop.attr({
												fill : G(g, n.fluidAlpha)
											}), i.topLight.attr({
												stroke : G(g, n.fluidAlpha
																* 0.4)
											}), i.topLightBorder.attr({
												fill : {
													FCcolor : {
														color : g + q + g,
														alpha : "0,"
																+ n.fluidAlpha
																* 0.3,
														ratio : "0,80",
														angle : 90
													}
												}
											}));
							p
									&& (g = n.scaleY + n.h
											* (1 - n.fulidHRatio), i.fluid
											.attr({
														d : n.fluidPath
																.concat(["L",
																		n.lx2,
																		g,
																		n.lx1,
																		g, "Z"])
													}), i.fluidTop.attr({
												d : c
														.concat(
																["M", n.lx1, g],
																w(
																		n.x,
																		g,
																		n.lx1,
																		g,
																		n.lx2,
																		g,
																		n.lCylWidthHalf,
																		1, 1, 0),
																["Z"])
											}))
						} else
							this._attr(h, g);
				return i
			}, d = function(a, b, c) {
				this.border.shadow(a, b, c)
			};
			return function(a, f, h, g, i, k, l, o, p, n, w, r, s) {
				if (sa(a))
					f = a.y, h = a.r, g = a.h, i = a.gStr, k = a.renderer, l = a.fulidHRatio, o = a.conColor, p = a.conBorderColor, n = a.conBorderThickness, w = a.fluidColor, r = a.fluidAlpha, s = a.is2D, a = a.x;
				l >= 0 && l <= 1 || (l = 0);
				var o = m(o, "FFFFFF"), p = m(p, "#000000"), n = j(n, 1), w = m(
						w, "000000"), r = j(r, 100), A = {
					x : a,
					y : f,
					r : h,
					h : g,
					renderer : k,
					fulidHRatio : l,
					conColor : o,
					conBorderColor : p,
					conBorderThickness : n,
					fluidStroke : 3,
					fluidColor : w,
					is2D : s,
					fluidAlpha : r
				}, t = k.getArcPath, i = k.g(i);
				i._attr = i.attr;
				i.attr = b;
				i.shadow = d;
				i._3dAttr = A;
				var x = K(o, 80), w = K(w, s ? 80 : 70), o = S(o, 80), I = h
						* 0.643, v = I * 0.33, D = I - v, y = a - I, z = a + I, u = a
						- D, D = a + D, J = f + I, F = J + g, O = F + h * 0.766, M = f
						+ v, g = J + g * (1 - l), l = I * 0.9, B = h + l - I, R = a
						- l, N = a + l, L = O
						- Math.abs(Math.sqrt(B * B - l * l)), E = parseInt(a
								- I * 0.6, 10), I = a + I / 2;
				A.fluidPath = c.concat(["M", R, L], t(a, O, R, L, N, L, B, B,
								0, 1));
				A.scaleY = J;
				A.lx1 = R;
				A.lx2 = N;
				A.lCylWidthHalf = l;
				i.topLight = k.path(["M", R, J, "L", N, J]).attr({
							"stroke-width" : 1,
							stroke : G(w, 40)
						}).add(i);
				i.topLightBorder = k.path(["M", R, J, "L", N, J, N, M, R, M,
						"Z"]).attr({
							"stroke-width" : 0,
							fill : {
								FCcolor : {
									color : w + q + w,
									alpha : "40,0",
									ratio : "0,80",
									radialGradient : !0,
									gradientUnits : "objectBoundingBox",
									cx : 0.5,
									cy : 1,
									r : "70%"
								}
							}
						}).add(i);
				i.fluid = k.path(A.fluidPath.concat(["L", N, g, R, g, "Z"]))
						.attr({
									"stroke-width" : 0,
									fill : G(w, r)
								}).add(i);
				i.fluidTop = k.path(c.concat(["M", R, g], t(a, g, R, g, N, g,
								l, 1, 1, 0), ["Z"])).attr({
							"stroke-width" : 0,
							fill : G(w, r)
						}).add(i);
				i.border = k.path(c.concat(["M", u, f], t(u, M, u, f, y, M, v,
								v, 0, 0), ["L", y, F], t(a, O, y, F, z, F, h,
								h, 0, 1), ["L", z, M], t(D, M, z, M, D, f, v,
								v, 0, 0), ["Z"])).attr({
							"stroke-width" : n,
							stroke : p
						}).add(i);
				if (!s)
					i.bulbBorderLight = k.path(c.concat(["M", y, F], t(a, O, y,
									F, z, F, h, h, 0, 1), t(a, O, z, F, y, F,
									h, h, 0, 0),
							t(a, O, y, F, z, F, h, h, 1, 0), ["Z"])).attr({
								"stroke-width" : 0,
								stroke : "#00FF00",
								fill : {
									FCcolor : {
										gradientUnits : "objectBoundingBox",
										cx : 0.5,
										cy : 0.5,
										r : "50%",
										color : x + q + o,
										alpha : "0,50",
										ratio : "78,30",
										radialGradient : !0
									}
								}
							}).add(i), i.bulbTopLight = k.path(c.concat(["M",
									y, F], t(a, O, y, F, z, F, h, h, 0, 1), t(
									a, O, z, F, y, F, h, h, 0, 0), t(a, O, y,
									F, z, F, h, h, 1, 0), ["Z"])).attr({
								"stroke-width" : 0,
								fill : {
									FCcolor : {
										gradientUnits : "objectBoundingBox",
										cx : 0.3,
										cy : 0.1,
										r : "100%",
										color : o + q + x,
										alpha : "60,0",
										ratio : "0,30",
										radialGradient : !0
									}
								}
							}).add(i), i.bulbCenterLight = k.path(c.concat([
									"M", y, F],
							t(a, O, y, F, z, F, h, h, 0, 1), t(a, O, z, F, y,
									F, h, h, 0, 0), t(a, O, y, F, z, F, h, h,
									1, 0), ["Z"])).attr({
								"stroke-width" : 0,
								fill : {
									FCcolor : {
										gradientUnits : "objectBoundingBox",
										cx : 0.25,
										cy : 0.7,
										r : "100%",
										color : o + q + x,
										alpha : "80,0",
										ratio : "0,70",
										radialGradient : !0
									}
								}
							}).add(i), i.cylLeftLight = k.path(c.concat(["M",
									a, f, "L", u, f], t(u, M, u, f, y, M, v, v,
									0, 0), ["L", y, F, a, F, "Z"])).attr({
								"stroke-width" : 0,
								fill : {
									FCcolor : {
										color : o + q + x,
										alpha : "50,0",
										ratio : "0,80",
										angle : 0
									}
								}
							}).add(i), i.cylRightLight = k.path(c.concat(["M",
									y, f, "L", D, f], t(D, M, D, f, z, M, v, v,
									1, 0), ["L", z, F, y, F, "Z"])).attr({
								"stroke-width" : 0,
								fill : {
									FCcolor : {
										color : o + q + x + q + x,
										alpha : "50,0, 0",
										ratio : "0,40,60",
										angle : 180
									}
								}
							}).add(i), i.cylLeftLight1 = k.path(["M", E, M,
							"L", y, M, y, F, E, F, "Z"]).attr({
								"stroke-width" : 0,
								fill : {
									FCcolor : {
										color : o + q + x,
										alpha : "60,0",
										ratio : "0,100",
										angle : 180
									}
								}
							}).add(i), i.cylRightLight1 = k.path(["M",
							E - 0.01, M, "L", I, M, I, F, E - 0.01, F, "Z"])
							.attr({
										"stroke-width" : 0,
										fill : {
											FCcolor : {
												color : o + q + x,
												alpha : "60,0",
												ratio : "0,100",
												angle : 0
											}
										}
									}).add(i);
				return i
			}
		}(), r = J.extendClass(U.cylinder, {
			type : "thermometer",
			drawPoints : function() {
				var a = this.chart, c = a.renderer, b = a.options.scale, d = b.max, b = b.min, e = this.options, f = a.options.chart, h = this.data[0], g = j(
						h.y, b), i = f.thmBulbRadius, k = i * 0.643, g = (g - b)
						/ (d - b), l = La(h.color), o = l.get("hex").replace(
						Fa, E), l = l.get("a") * 100;
				h.minValue = b;
				h.maxValue = d;
				h.fulidHRatio = g;
				h.graphic = qb(0 + k, 0 - k, i, a.plotHeight, "points-group",
						c, g, f.thmGlassColor, f.gaugeBorderColor,
						f.gaugeBorderThickness, o, l, f.use3DLighting)
						.add(this.group);
				h.graphic.shadow(e.shadow, !1, e.shadow);
				Ua(a.plotWidth, a.plotHeight, a.renderer, this, this.group)
			},
			drawDataLabels : U.led.prototype.drawDataLabels,
			animate : function() {
				var a, c, b = this.options.animation;
				b && !sa(b) && (b = {});
				if ((c = (a = this.data[0]) && a.graphic) && !c.isAnimating)
					c.isAnimating = !0, c.attr({
								fulidHRatio : 0
							}), c.animate({
								fulidHRatio : a.fulidHRatio
							}, b);
				this.animate = null
			},
			render : function() {
				var d;
				var a, c = this.chart;
				a = c.renderer;
				var b = this.options;
				if (!this.group)
					d = this.group = a.g("series"), a = d, a.attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : b.zIndex
							}).translate(c.plotLeft, c.plotTop)
							.add(c.seriesGroup);
				this.drawPoints();
				this.drawTracker();
				this.drawDataLabels();
				if (this.visible)
					c.currentSeriesIndex = this.index, c.naviigator
							&& placeNaviGator(c);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			}
		});
		U.thermometer = r;
		Y.lineargauge = ia(Y.bulb, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.bulb, {
			type : "lineargauge",
			drawTracker : function() {
				var a = this, c = a.chart, b = a.data, d = c.options.scale, e = (d.max - d.min)
						/ c.plotWidth, f = {}, h = c.renderer, g, i, k = +new Date, l = a.options, o;
				c.options.chart.hasScroll && c.trackerGroup.clip(a.clipRect);
				Ka(a.data, function(b) {
					i = b.tracker;
					var d = b.errorTracker, e = b.errorValue;
					g = b.trackerArgs || b.shapeArgs || {};
					delete g.strokeWidth;
					if (i)
						i.attr(g);
					else {
						if (b.link !== void 0)
							var f = {
								cursor : "pointer",
								_cursor : "hand"
							};
						b.tracker = h[b.shapeType]
								&& h[b.shapeType](g).attr({
											isTracker : k,
											fill : Ma,
											visibility : a.visible
													? ja
													: "hidden",
											zIndex : l.zIndex || 1
										}).on(Ba ? "touchstart" : "mouseover",
										function(d) {
											o = d.relatedTarget
													|| d.fromElement;
											if (c.hoverSeries !== a
													&& Ga(o, "isTracker") !== k)
												a.onMouseOver();
											b.onMouseOver()
										}).on("mouseout", function(b) {
									if (!l.stickyTracking
											&& (o = b.relatedTarget
													|| b.toElement, Ga(o,
													"isTracker") !== k))
										a.onMouseOut()
								}).css(f).add(b.group || c.trackerGroup)
					}
					if (e)
						e = b.errorPath, d ? d.attr({
									d : e
								}) : (d = {
							series : a,
							chart : c,
							id : b.id,
							label : b.label,
							options : b.options,
							svgElm : b.svgElm,
							toolText : b.errorValue + "",
							getLabelConfig : b.getLabelConfig
						}, b.errorTracker = h.path(e).attr({
							"stroke-width" : Aa(a.options.errorBarThickness, 10),
							stroke : Ma,
							isTracker : k,
							fill : Ma,
							visibility : a.visible ? ja : "hidden",
							zIndex : 1
						}).on(Ba ? "touchstart" : "mouseover", function(a, b) {
							return function(c) {
								var d = b.plotLeft, e = b.plotTop;
								a.tooltipPos = [m(c.layerX, c.x) - d + 20,
										m(c.layerY, c.y) - e - 15];
								b.tooltip.refresh(a)
							}
						}(d, c)).on("mousemove", function(a, b) {
							return function(c) {
								var d = b.plotLeft, e = b.plotTop;
								a.tooltipPos = [m(c.layerX, c.x) - d + 20,
										m(c.layerY, c.y) - e - 15];
								b.tooltip.refresh(a)
							}
						}(d, c)).on("mouseout", function(a) {
									return function() {
										a.tooltip.hide()
									}
								}(c)).css(f).add(b.group || c.trackerGroup))
				});
				for (var p = {
					pageX : 0,
					pageY : 0
				}, n = function(b) {
					var d = b.type === "dragend", e = b.data, g = Ba && Qa(b)
							|| p, h = a.chart && a.chart.options
							&& a.chart.options.instanceAPI
							&& a.chart.options.instanceAPI.chartInstance;
					if (d) {
						(b = h && h.jsVars)
								&& (b._rtLastUpdatedData = h.getDataJSON());
						ha.raiseEvent("RealTimeUpdateComplete", {
									data : "&value=" + e.updatedValStr,
									prevData : f.values,
									source : "editMode",
									url : null
								}, h);
						try {
							window.FC_ChartUpdated
									&& window.FC_ChartUpdated(h.id)
						} catch (i) {
							setTimeout(function() {
										throw i;
									}, 1)
						}
						c.tooltip && c.tooltip.block(!1)
								&& c.tooltip.refresh(e, !0)
					} else
						f = h.getDataJSON(), e.dragStartX = b.pageX || g.pageX, e.dragStartY = b.pageY
								|| g.pageY, c.tooltip && c.tooltip.block(!0)
				}, q = function(b) {
					var c = b.data, f = Ba && Qa(b) || p, g = c.dragStartX
							- (b.pageX || f.pageX), h = j(c.value, c.y, d.min), g = h
							- g * e, i = 0, k = [];
					if (g < d.min)
						g = d.min;
					else if (g > d.max)
						g = d.max;
					for (; i < c.index; i += 1)
						k.push("");
					k.push(g);
					if (h !== g && a.realtimeUpdate({
								values : k
							}))
						c.updatedValStr = k.join("|"), c.dragStartX = b.pageX
								|| f.pageX
				}, r = b && b.length || 0; r--;)
					if (point = b[r], point.editable === "1" && point.tracker)
						point.index = r, point.tracker.css({
									cursor : "pointer",
									_cursor : "hand"
								}), Ra(point.tracker.element,
								"dragstart dragend", n, point), Ra(
								point.tracker.element, "drag", q, point)
			},
			realtimeUpdate : function(a, c) {
				if (a === this.lastUpdatedObj)
					return !1;
				var b = this.chart, d = b.options.scale, e = b.options.series
						&& b.options.series[0] && b.options.series[0].data, f = b.options.plotOptions.series.animation, h = {
					duration : f ? a.interval : 0
				}, g = this && this.data, i = 0, k = this.chart.options.instanceAPI.numberFormatter, l, j, o, n = b.plotWidth, q = b.plotHeight, r = b.options.chart.gaugeType, s = d.min, A = d.max, t = {
					1 : function(a) {
						return {
							x : (a - s) * n / (A - s)
						}
					},
					2 : function(a) {
						return {
							y : (a - s) * q / (A - s)
						}
					},
					3 : function(a) {
						return {
							x : (A - a) * n / (A - s)
						}
					},
					4 : function(a) {
						return {
							y : (A - a) * q / (A - s)
						}
					}
				}, x = a.values || [], I = a.labels || [], v = a.toolTexts
						|| [], y = a.showLabels || [], D = Math.min(g.length,
						x.length), z = !1;
				if (c) {
					if (d = g[c.index], j = k.getCleanValue(x[0]), d
							&& (j === null || j <= A && j >= s)) {
						if (j !== null) {
							d.value = j;
							o = t[r](j);
							f && $(d.graphic).stop(!0, !0);
							d.graphic.animate(o, h);
							if (d.tracker) {
								f && $(d.tracker).stop(!0, !0);
								d.tracker.animate(o, h);
								if (o.x !== void 0)
									d.plotX = o.x;
								if (o.y !== void 0)
									d.plotY = o.y
							}
							z = !0
						}
						l = m(I[0], k.dataLabels(j));
						d.dataLabel
								&& l !== void 0
								&& (l = y[0] == 0 ? "" : l, f
										&& $(d.dataLabel).stop(!0, !0), d.dataLabel
										.animate(o, h), d.dataLabel.attr({
											text : l
										}), z = !0);
						l = m(v[0], e && e[c.index] && e[c.index].isLabelString
										&& e[c.index].toolText || void 0, k
										.dataLabels(j));
						if (l !== void 0)
							d.toolText = l, b.tooltip
									&& b.tooltip.refresh(d, !0), z = !0
					}
				} else {
					for (; i < D; i += 1)
						if (d = g[i], j = k.getCleanValue(x[i]), d
								&& (j === null || j <= A && j >= s)) {
							if (j !== null) {
								d.value = j;
								o = t[r](j);
								f && $(d.graphic).stop(!0, !0);
								d.graphic.animate(o, h);
								if (d.tracker) {
									f && $(d.tracker).stop(!0, !0);
									d.tracker.animate(o, h);
									if (o.x !== void 0)
										d.plotX = o.x;
									if (o.y !== void 0)
										d.plotY = o.y
								}
								z = !0
							}
							l = m(I[i], k.dataLabels(j));
							d.dataLabel
									&& l !== void 0
									&& (l = y[i] == 0 ? "" : l, f
											&& $(d.dataLabel).stop(!0, !0), d.dataLabel
											.animate(o, h), d.dataLabel.attr({
												text : l
											}), z = !0);
							l = m(v[i], e && e[i] && e[i].isLabelString
											&& e[i].toolText || void 0, k
											.dataLabels(j));
							if (l !== void 0)
								d.toolText = l, b.tooltip
										&& b.tooltip.refresh(d, !0), z = !0
						}
					this.lastUpdatedObj = a
				}
				return z
			},
			translate : function() {
				var a = this.data, c = this.chart, b = c.options
						&& c.options.chart, d = c.options.scale, e = d
						&& d.trendPoint || [], f = c.plotHeight, h = c.plotWidth, g = d.min, i = d.max, k = i
						- g, l = a.length, o = 0, p = 0, n = 0, m = 0, q = g;
				c.options.instanceAPI.isHorizontal
						? (o = h / k, m = b.pointerOnOpp ? f : 0, c = d.reverseScale
								? 3
								: 1)
						: (p = f / k, n = b.pointerOnOpp ? h : 0, c = d.reverseScale
								? 4
								: 2);
				d.reverseScale && (o = -o, p = -p, q = i);
				this.gaugeType = c;
				for (this.valueTranslator = function(a) {
					a = j(a, q) - q;
					return {
						x : a * o + n,
						y : a * p + m
					}
				}; l--;)
					i = a[l], d = j(i.y, q) - q, i.plotX = i.origX = d * o + n, i.plotY = i.origY = d
							* p + m;
				for (l = e.length; l--;)
					i = e[l], d = i.startValue, i.plotX = i.origX = d * o + n, i.plotY = i.origY = d
							* p + m
			},
			drawPoints : function() {
				var a = this.data, c = a.length, b = this.chart, d = b.options.scale, e = b.options.chart, f = b.renderer, h = e.showPointerShadow, g = e.showShadow, d = d
						&& d.trendPoint || [], i, k;
				k = this.gaugeType;
				var l = {
					right : 0,
					top : 0.5,
					left : 1,
					bottom : 1.5
				}, j, o = function() {
					return {
						x : this.category,
						y : this.y,
						series : this.series,
						point : this,
						percentage : this.percentage,
						total : this.total || this.stackTotal
					}
				}, e = e.pointerOnOpp, e = k === 1
						? e ? "top" : "bottom"
						: k === 2 ? e ? "left" : "right" : k === 3 ? e
								? "top"
								: "bottom" : e ? "left" : "right";
				if (this.dataById === void 0)
					this.dataById = {};
				for (; c--;)
					i = a[c], k = l[e] * Math.PI, i.shapeType = "symbol", i.shapeArgs = {
						symbol : "poly_" + i.sides,
						x : i.plotX,
						y : i.plotY,
						radius : i.radius,
						options : {
							startAngle : k
						}
					}, i = a[c], i.id !== void 0 && (this.dataById[i.id] = {
						index : c,
						point : i
					}), k = h ? {
						opacity : Math.max(i.bgalpha, i.borderalpha) / 100
					} : null, i.graphic = f[i.shapeType](i.shapeArgs).attr({
								fill : i.color,
								stroke : i.borderColor,
								"stroke-width" : i.borderWidth
							}).add(this.group).shadow(k, void 0, k);
				for (c = d.length; c--;)
					if (i = d[c], i.useMarker)
						i.showOnTop
								? (e = "bottom", a = 0)
								: (e = "top", a = b.plotHeight), k = l[e]
								* Math.PI, i.shapeType = "symbol", i.shapeArgs = {
							symbol : "poly_3",
							x : i.plotX,
							y : a,
							radius : i.markerRadius,
							options : {
								startAngle : k
							}
						}, k = {
							apply : g,
							opacity : 1
						}, i.graphic = j = f[i.shapeType](i.shapeArgs).attr({
									fill : i.markerColor,
									stroke : i.markerBorderColor,
									"stroke-width" : 1
								}).add(this.group).shadow(k.apply, void 0, k), i.markerToolText !== ""
								&& function(a) {
									var c = {
										series : {},
										chart : b,
										id : i.id,
										label : this.label,
										options : this.options,
										svgElm : this.svgElm,
										toolText : a,
										getLabelConfig : o
									};
									j.on("mouseover", function(a) {
										var d = b.plotLeft, e = b.plotTop;
										c.tooltipPos = [
												m(a.layerX, a.x) - d + 20,
												m(a.layerY, a.y) - e - 15];
										b.tooltip.refresh(c)
									}).on("mouseout", function() {
												b.tooltip.hide()
											}).on("mousemove", function(a) {
										var d = b.plotLeft, e = b.plotTop;
										c.tooltipPos = [
												m(a.layerX, a.x) - d + 20,
												m(a.layerY, a.y) - e - 15];
										b.tooltip.refresh(c)
									})
								}(i.markerToolText)
			},
			drawGraph : function() {
				var a = this.chart, c = a.options.chart, b = a.options.scale, d = a.options.instanceAPI, e = this.gaugeType, f = a.plotHeight, h = a.plotWidth, g = b.min, i = b.max, k = d.colorRangeGetter
						.getColorRangeArr(g, i), b = b && b.trendPoint || [], l = c.colorRangeFillMix, o = c.colorRangeFillRatio, p = c.colorRangeBorderColor, n = c.colorRangeBorderAlpha, m = c.colorRangeBorderThickness, r = a.renderer, c = c.showShadow, s, A, t, x, I, v, y, D = d.colorM, d = this.group;
				e === 1 ? (t = function(a, b) {
					return {
						x : a * h / (i - g),
						y : 0,
						width : (b - a) * h / (i - g),
						height : f
					}
				}, x = 270) : e === 2 ? (t = function(a, b) {
					return {
						x : 0,
						y : a * f / (i - g),
						width : h,
						height : (b - a) * f / (i - g)
					}
				}, x = 180) : e === 3 ? (t = function(a, b) {
					return {
						x : h - b * h / (i - g),
						y : 0,
						width : (b - a) * h / (i - g),
						height : f
					}
				}, x = 270) : (t = function(a, b) {
					return {
						x : 0,
						y : f - b * f / (i - g),
						width : h,
						height : (b - a) * f / (i - g)
					}
				}, x = 180);
				var z = r.g("range").add(d);
				z.outerRect = r.rect(0, 0, h, f, 0).add(z);
				e = 0;
				for (A = k.length; e < A; e += 1) {
					I = k[e];
					y = t(I.minvalue - g, I.maxvalue - g);
					I.x = y.x;
					I.y = y.y;
					I.width = y.width;
					I.height = y.height;
					s = I.code;
					v = G(kb(s, p), n);
					s = c ? Math.max(I.alpha, n) / 100 : null;
					var u = D.parseColorMix(I.code, l), J = D.parseAlphaList(
							I.alpha, u.length);
					I = j(I.borderAlpha, n);
					var F = J.split(q), F = Aa.apply(Math, F), F = Aa(m && I
									|| 0, F);
					z["colorBand" + e] = r.rect(y.x, y.y, y.width, y.height, 0)
							.attr({
										"stroke-width" : m,
										stroke : v,
										fill : {
											FCcolor : {
												color : u.toString(),
												ratio : o,
												alpha : J,
												angle : x
											}
										}
									}).add(z).shadow(s, void 0, {
										opacity : F / 100
									})
				}
				e = 0;
				for (A = b.length; e < A; e += 1)
					k = b[e], y = t(k.startValue - g, k.endValue - g), k.isZone
							? z["trendZone" + e] = r.rect(y.x, y.y, y.width,
									y.height, 0).attr({
										fill : {
											FCcolor : {
												color : k.color,
												alpha : k.alpha
											}
										}
									}).add(z)
							: (l = r.crispLine(["M", y.x, y.y, "L", y.x,
											y.y + y.height], k.thickness), z["trendLine"
									+ e] = r.path(l).attr({
										stroke : G(k.color, k.alpha),
										"stroke-width" : k.thickness,
										dashstyle : k.dashStyle
									}).add(z));
				Ua(a.plotWidth, a.plotHeight, a.renderer, this, d)
			},
			drawDataLabels : function() {
				var a = this.data, c = this.chart, b = this.options, d = c.options.scale, e = c.options.chart, f = c.options.instanceAPI, h = this.dataLabelsGroup, g = d.min, i = d.max, k = this.gaugeType, l = f.colorRangeGetter
						.getColorRangeArr(g, i), f = f.numberFormatter, o = e.colorRangeStyle.style
						|| {}, p, n = c.plotHeight, q = c.plotWidth, d = d
						&& d.trendPoint || [], r = e.pointerOnOpp, s = e.valueInsideGauge, A = e.showGaugeLabels, b = b.dataLabels.style, t, x, I, v, y = c.renderer.smartLabel, D, z = j(
						parseInt(b.fontHeight, 10), parseInt(b.lineHeight, 10),
						12), u = e.valuePadding + z * 0.5, e = e.valuePadding, G = u, u = s === r
						? u
						: u + z / 2;
				y.setStyle(b);
				D = y.getOriSize("W").width;
				if (!h)
					h = this.dataLabelsGroup = c.renderer.g("data-labels")
							.attr({
										visibility : this.visible
												? ja
												: "hidden",
										zIndex : 6
									}).add(this.group);
				k === 1 ? (I = function(a, b, c) {
					return {
						x : a * q / (i - g),
						y : c ? b ? n - u : n + u : b ? u : -u,
						align : "center"
					}
				}, v = function(a, b) {
					return {
						x : (a - g + (b - a) / 2) * q / (i - g),
						y : n / 2,
						width : (b - a) * q / (i - g),
						height : n
					}
				}) : k === 2 ? (I = function(a, b, c) {
					c
							? b ? (c = "right", b = q - u) : (c = "left", b = q
									+ u)
							: b ? (c = "left", b = u) : (c = "right", b = -u);
					return {
						x : b,
						y : a * n / (i - g),
						align : c
					}
				}, v = function(a, b) {
					return {
						y : (a - g + (b - a) / 2) * n / (i - g),
						x : q / 2,
						height : (b - a) * n / (i - g),
						width : q
					}
				}) : k === 3 ? (I = function(a, b, c) {
					return {
						x : q - a * q / (i - g),
						y : c ? b ? n - u : n + u : b ? u : -u,
						align : "center"
					}
				}, v = function(a, b) {
					return {
						x : q - (a - g + (b - a) / 2) * q / (i - g),
						y : n / 2,
						width : (b - a) * q / (i - g),
						height : n
					}
				}) : (I = function(a, b, c) {
					c
							? b ? (c = "right", b = q - u) : (c = "left", b = q
									+ u)
							: b ? (c = "left", b = u) : (c = "right", b = -u);
					return {
						x : b,
						y : n - a * n / (i - g),
						align : c
					}
				}, v = function(a, b) {
					return {
						y : n - (a - g + (b - a) / 2) * n / (i - g),
						x : q / 2,
						height : (b - a) * n / (i - g),
						width : q
					}
				});
				if (a) {
					k = 0;
					for (t = a.length; k < t; k += 1)
						if (x = a[k], x.showvalue != 0 && x.displayValue !== E)
							p = I(x.y - g, s, r), x.dataLabel = c.renderer
									.text(x.displayValue, p.x, p.y).attr({
												align : p.align
											}).css(b).add(h)
				}
				b = o || {};
				y.setStyle(b);
				if (l && A) {
					k = 0;
					for (t = l.length; k < t; k += 1)
						p = l[k], a = m(p.label, p.name), T(a)
								&& (p = v(p.minvalue, p.maxvalue), a = p.width
										- 4 > D
										&& p.height - 4 > z ? y.getSmartText(a,
										p.width - 4, p.height - 4) : y
										.getSmartText(a, p.width, p.height), c.renderer
										.text(
												a.text,
												p.x,
												p.y + z / 4 - (a.height - z)
														/ 2).attr({
													align : "center"
												}).css(b).add(h))
				}
				if (d) {
					k = 0;
					for (t = d.length; k < t; k += 1)
						l = d[k], p = I(l.startValue, 0, !l.showOnTop), y = l.showOnTop
								? -e
								: n + G, a = l.isZone ? v(l.startValue,
								l.endValue).x : p.x, l.dataLabel = c.renderer
								.text(
										m(l.displayValue,
												f.dataLabels(l.startValue)), a,
										y).attr({
											align : p.align
										}).css(b).add(h)
				}
			},
			animate : function() {
				var a = this.chart, c = this.gaugeType, b = a.options.chart.animation, d = a.plotHeight, e = a.plotWidth, f = 0, a = (a.series
						&& a.series[0] && a.series[0].data || []).length, h = c === 1
						|| c === 3 ? "x" : "y", g = {}, i = {};
				b && !sa(b) && (b = {});
				for (i[h] = c === "3" ? e : c === "4" ? d : 0; f < a; f += 1) {
					d = (c = this.data[f]) && c.graphic;
					g[h] = c.shapeArgs[h];
					if (d && !d.isAnimating)
						d.isAnimating = !0, d.attr(i), d.animate(g, b);
					if ((c = c && c.dataLabel) && !c.isAnimating)
						c.isAnimating = !0, c.attr(i), c.animate(g, b)
				}
				this.animate = null
			}
		});
		U.lineargauge = r;
		Y.bullet = ia(Y.bulb, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.lineargauge, {
			type : "bullet",
			translate : function() {
				var a = this.data, c = this.chart, b = c.options.scale, d = c.plotHeight, e = c.plotWidth, f = b.min, h = b.max, g = h
						- f, i = a.length, k = 0, l = 0, o = 0, p = 0, n = f;
				c.options.instanceAPI.isHorizontal
						? (k = e / g, p = d / 2, c = b.reverseScale ? 3 : 1)
						: (l = d / g, o = e / 2, c = b.reverseScale ? 4 : 2);
				b.reverseScale && (k = -k, l = -l, n = h);
				this.gaugeType = c;
				for (this.valueTranslator = function(a) {
					a = j(a, n) - n;
					return {
						x : a * k + o,
						y : a * l + p
					}
				}; i--;)
					h = a[i], b = j(h.y, n) - n, h.plotX = h.origX = b * k + o, h.plotY = h.origY = b
							* l + p
			},
			drawPoints : function() {
				var a = this.data, c = this.chart, b = c.renderer, d = c.plotHeight, e = c.plotWidth, f = c.options.scale, h = a[0], a = a[1], g, i, k, l, j = a.borderWidth;
				l = c.options.instanceAPI.isHorizontal;
				var o;
				o = this.valueTranslator(Math.min(Math.max(f.min, 0), f.max));
				if (T(h.y))
					h.plotAsDot
							? (i = k = (l ? d : e) * (h.plotFillPercent / 100), f = h.plotX
									- k / 2, c = h.plotY - i / 2, l
									? (h.animInitAttr = {
										x : o.x
									}, h.animAttr = {
										x : f
									})
									: (h.animInitAttr = {
										y : o.y
									}, h.animAttr = {
										y : c
									}))
							: (f = Math.min(h.plotX, o.x), c = Math.min(
									h.plotY, o.y), i = Math.abs(h.plotY - o.y), k = Math
									.abs(h.plotX - o.x), l
									? (h.animInitAttr = {
										x : o.x,
										width : 0
									}, h.animAttr = {
										x : f,
										width : k
									}, i = d * (h.plotFillPercent / 100), c -= i
											/ 2)
									: (h.animInitAttr = {
										y : o.y,
										height : 0
									}, h.animAttr = {
										y : c,
										height : i
									}, k = e * (h.plotFillPercent / 100), f -= k
											/ 2)), h.shapeType = "rect", h.shapeArgs = {
						x : f,
						y : c,
						height : i,
						width : k,
						endY : g,
						r : 0
					}, h.graphic = b[h.shapeType](h.shapeArgs).attr({
								fill : h.color,
								stroke : h.borderColor,
								"stroke-width" : h.borderWidth
							}).add(this.group);
				if (T(a.y))
					l
							? (i = d * a.targetFillPercent / 100, l = i / 2, d = f = a.plotX, h = c = a.plotY
									- l, g = a.plotY + l, l = i, i = j, e = f
									- j / 2, k = [f + j, a.plotY])
							: (i = e * a.targetFillPercent / 100, l = i / 2, e = f = a.plotX
									- l, c = g = a.plotY, d = a.plotX + l, l = j, h = c
									- j / 2, k = [a.plotX, c + j + 10]), a.shapeType = "rect", a.tooltipPos = k, a.trackerArgs = {
						x : e,
						y : h,
						height : l,
						width : i,
						r : 0
					}, a.shapeArgs = b.crispLine(["M", f, c, "L", d, g], j), a.animInitAttr = {
						d : ["M", a.plotX, a.plotY, "L", a.plotX, a.plotY]
					}, a.animAttr = {
						d : a.shapeArgs
					}, a.graphic = b.path(a.shapeArgs).attr({
								stroke : a.borderColor,
								"stroke-width" : j,
								"stroke-linecap" : "round"
							}).add(this.group)
			},
			drawDataLabels : U.led.prototype.drawDataLabels,
			animate : function(a) {
				var c = this.data, b, d = this.options.animation;
				d && !sa(d) && (d = {});
				if (!a) {
					if ((a = c[0]) && a.animInitAttr && a.animAttr)
						if ((b = a && a.graphic) && !b.isAnimating)
							b.isAnimating = !0, b.attr(a.animInitAttr), b
									.animate(a.animAttr, d);
					if ((a = c[1]) && a.animInitAttr && a.animAttr)
						if ((b = a && a.graphic) && !b.isAnimating)
							b.isAnimating = !0, b.attr(a.animInitAttr), b
									.animate(a.animAttr, d);
					this.animate = null
				}
			}
		});
		U.bullet = r;
		Y.hbullet = ia(Y.bullet, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.bullet, {
			type : "hbullet",
			drawDataLabels : function() {
				var a = this.chart, c = this.data[0], b = this.dataLabelsGroup, d = a.plotWidth, e = a.plotHeight, f = a.options.chart.valuePadding, h = this.options.dataLabels, g = h.style;
				parseInt(g.lineHeight);
				if (!b)
					b = this.dataLabelsGroup = a.renderer.g("data-labels")
							.translate(a.plotLeft, a.plotTop).attr({
										visibility : this.visible
												? ja
												: "hidden",
										zIndex : 6
									}).add();
				d += f;
				if (c.y !== void 0 && !isNaN(c.y) && c.displayValue !== E)
					c.dataLabel = a.renderer.text(c.displayValue, d, e / 2), c.dataLabel
							.attr({
										align : h.align || za
									}).css(g).add(b)
			},
			realtimeUpdate : function(a) {
				var c = this && this.options, b = this && this.data, d = this.chart, e, f = d.options.instanceAPI.numberFormatter, h, g, i = c.gaugeWidth, d = c.gaugeOriginX
						- d.plotLeft, k = c.min, l, c = c.max, j = a.values
						|| [];
				if (b[0]
						&& j[0]
						&& (a = b[0], e = j[0], h = f.getCleanValue(j[0], !0), a
								&& h <= c && h >= k))
					a.plotasdot ? (l = d + (h - k) * i / (c - k)
							- a.shapeArgs.width / 2, a.graphic.animate({
								x : l
							})) : (g = (h - k) * i / (c - k), l = (h - a.value)
							* i / (c - k), a.graphic.animate({
								width : g
							})), e = m(e.label, f.dataLabels(h)), a.toolText = e, a.value = h, a.dataLabel
							&& a.dataLabel.attr({
										text : e
									}), a.tracker && (a.tracker.animate({
								width : g
							}), a.plotX += l / 2);
				if (b[1]
						&& j[1]
						&& (a = b[1], e = j[1], h = f.getCleanValue(sa(e)
										? e.value
										: e, !0), a
								&& h <= c
								&& h >= k
								&& (l = d + (h - k) * i / (c - k)
										- a.shapeArgs.width / 2, a.graphic
										.animate({
													x : l
												}), e = m(e.label, f
												.dataLabels(h)), a.toolText = e, a.value = h, a.tracker)))
					a.tracker.animate({
								x : l
							}), a.plotX = l
			}
		});
		U.hbullet = r;
		Y.drawingpad = ia(Y.pie, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.pie, {
					type : "drawingpad",
					drawPoints : function() {
					},
					drawDataLabel : function() {
					},
					animate : function() {
					}
				});
		U.drawingpad = r;
		Y.sparkline = ia(Y.line, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.line, {
			type : "sparkline",
			drawDataLabels : function() {
				var a = this.chart, c = this.data[0], b = this.dataLabelsGroup, d = parseInt(this.options.dataLabels.style.lineHeight), e = a.options.chart, f = e.valuePadding, h = 0, d = a.plotHeight
						/ 2 + d * 0.3;
				if (!b)
					b = this.dataLabelsGroup = a.renderer.g("data-labels")
							.attr({
										visibility : this.visible
												? ja
												: "hidden",
										zIndex : 6
									}).translate(a.plotLeft, a.plotTop)
							.add(a.seriesGroup);
				if (T(e.openValue.label))
					c.openValue = a.renderer.text(e.openValue.label, -f, d)
							.attr({
										align : "right"
									}).css(e.openValue.style).add(b);
				if (T(e.closeValue.label))
					c.closeValue = a.renderer.text(e.closeValue.label,
							a.plotWidth + f, d).attr({
								align : "left"
							}).css(e.closeValue.style).add(b);
				c.closeValue && c.closeValue.getBBox().width > 0
						&& (h = c.closeValue.getBBox().width + f);
				if (T(e.highLowValue.label))
					c.dataLabel = a.renderer.text(e.highLowValue.label,
							a.plotWidth + f + h, d, void 0, 0).attr({
								align : "left"
							}).css(e.highLowValue.style).add(b)
			}
		});
		U.sparkline = r;
		Y.sparkwinloss = ia(Y.column, {
					states : {
						hover : {}
					}
				});
		r = J.extendClass(U.column, {
			type : "sparkwinloss",
			drawDataLabels : function() {
				var a = this.chart, c = a.options.chart, b = this.data[0], d = this.dataLabelsGroup, e = this.options.dataLabels.style, f = parseInt(e.lineHeight);
				if (!d)
					d = this.dataLabelsGroup = a.renderer.g("data-labels")
							.attr({
										visibility : this.visible
												? ja
												: "hidden",
										zIndex : 6
									}).translate(a.plotLeft, a.plotTop)
							.add(a.seriesGroup);
				if (typeof c.closeValue.label != "undefined")
					b.dataLabel = a.renderer.text(c.closeValue.label,
							a.plotWidth + c.valuePadding,
							a.plotHeight / 2 + f * 0.3).attr({
								align : "left"
							}).css(e).add(d)
			}
		});
		U.sparkwinloss = r;
		Y.angulargauge = ia(Y.pie, {
					states : {
						hover : {}
					}
				});
		var ab = function(a, c) {
			var b = Math.pow(10, c == void 0 ? 2 : c);
			a *= b;
			a = Math.round(Number(String(a)));
			a /= b;
			return a
		}, Va = function(a, c, b, d) {
			return [ab(a * b - c * d, 2), ab(c * b + a * d, 2)]
		}, rb = function() {
			return function(a, c) {
				var b, d, e, f = this, h = this._Attr, g, i, k;
				h || (h = f._Attr = {});
				xa(a) && T(c) && (b = a, a = {}, a[b] = c);
				if (xa(a))
					f = a == "angle" ? f._Attr[a] : f._attr(a);
				else
					for (b in a)
						if (d = a[b], b == "angle")
							if (h[b] = d, i = d * wa, h.tooltipPos[0] = h.cx
									+ h.toolTipRadius * Math.cos(i), h.tooltipPos[1] = h.cy
									+ h.toolTipRadius * Math.sin(i), f.renderer.type === "VML") {
								e = f.element;
								g = m(h.d, f.d.split(" "));
								h.d = g;
								k = Math.cos(i);
								i = Math.sin(i);
								g = ["M"]
										.concat(Va(g[1], g[2], k, i), ["L"],
												Va(g[4], g[5], k, i), Va(g[6],
														g[7], k, i), Va(g[8],
														g[9], k, i), ["Z"]);
								f._attr({
											d : g
										});
								if (h.color && h.color.FCcolor)
									h.color.FCcolor.angle = 0 - d;
								Ka(e.childNodes, function(a) {
									var b;
									if (T(a.angle))
										b = j(a.angle, 0), T(a.FCColorAngle)
												? b = a.FCColorAngle
												: a.FCColorAngle = b, b -= d, pa
												&& !da && (b %= 360), ib
												? a.angle = b
												: Ga(a, "angle", b)
								})
							} else
								f.rotate(d, 0, 0);
						else
							f._attr(b, d);
				return f
			}
		}, J = J.extendClass(U.pie, {
			type : "angulargauge",
			drawPoints : function() {
				var a = this.data, c = this.chart, b = c.options.chart, d = c.options.scale, e = this.options, c = c.renderer, f = Number(e.gaugeOriginX), h = Number(e.gaugeOriginY), g = b.gaugeStartAngle, i = b.gaugeEndAngle, b = d.min, d = d.max, k = this.pointGroup, l = d
						- b, o = i - g, p = 0, n, m, q, r, s = a && a.length, t, x = rb(
						g, i);
				if (this.dataById === void 0)
					this.dataById = {};
				for (; p < s; p += 1) {
					i = a[p];
					if (!T(i.y)) {
						i.y = b;
						if (!T(i.toolText))
							i.toolText = b;
						if (i.displayValue === " ")
							i.displayValue = b
					}
					i.id !== void 0 && (this.dataById[i.id] = {
						index : p,
						point : i
					});
					i.index = p;
					n = j(
							i.radius,
							(Number(e.gaugeOuterRadius) + Number(e.gaugeInnerRadius))
									/ 2);
					m = i.baseWidth;
					m /= 2;
					q = i.topWidth;
					r = q / 2;
					q = i.rearExtension;
					t = i.y >= b && i.y <= d ? (g + (i.y - b) / l * o) / wa : g;
					i.tooltipPos = [f, h];
					i.graphic = c.path(["M", n, -r, "L", n, r, -q, m, -q, -m,
							"Z"]).attr({
								fill : i.color,
								stroke : i.borderColor,
								"stroke-width" : i.borderThickness
							}).add(k).shadow(e.shadow);
					i.graphic._attr = i.graphic.attr;
					i.graphic.attr = x;
					i.graphic._Attr = {
						tooltipPos : i.tooltipPos,
						cx : f,
						cy : h,
						toolTipRadius : n - q,
						color : i.color
					};
					i.graphic.attr({
								angle : t
							})
				}
			},
			drawGraph : function() {
				var a = this.chart, c = a.options.chart, b = a.options.scale, d = this.options, e = this.chart.renderer, f = d.gaugeOuterRadius, h = d.gaugeInnerRadius, g = d.gaugeFillRatio, i = c.gaugeBorderColor, k = c.gaugeBorderThickness, l = c.gaugeBorderAlpha, o = d.gaugeFillMix, p = d.gaugeOriginX, n = d.gaugeOriginY, r = c.gaugeStartAngle, s = c.gaugeEndAngle, c = b.min, t = b.max, A = a.options.instanceAPI, I = A.colorRangeGetter
						.getColorRangeArr(c, t), x = 0, v = I.length, y = t - c, u = s
						- r, D, z, J, B, F = s > r ? 1 : 0, O = 1 - F, s = r, M = Math
						.cos(r), R = Math.sin(r), E = p + f * M, N = n + f * R;
				J = p + h * M;
				var L = n + h * R, K, T, b = b.trendPoint;
				if (!this.trendPointGroup)
					this.trendPointGroup = e.g("trendpoint").add(this.group);
				for (; x < v; x += 1) {
					D = I[x];
					z = r + (Math.min(D.maxvalue, t) - c) / y * u;
					M = Math.cos(z);
					R = Math.sin(z);
					K = p + f * M;
					T = n + f * R;
					M = p + h * M;
					R = n + h * R;
					B = Math.abs(s - z) > Math.PI ? 1 : 0;
					J = ["M", E, N].concat(e.getArcPath(p, n, E, N, K, T, f, f,
									F, B), ["L", M, R], e.getArcPath(p, n, M,
									R, J, L, h, h, O, B), ["Z"]);
					s = A.parseColorMix(D.code, o);
					N = A.parseAlphaList(D.alpha, s.length);
					E = A.parseRatioList(h / f * 100 + g, s.length);
					B = D.bordercolor;
					var U = j(D.borderAlpha, l);
					B = B && B.indexOf("{") == -1 ? G(B, U) : A.parseColorMix(
							D.code, m(B, i))[0];
					B = G(B, U);
					L = N.split(q);
					L = Aa.apply(Math, L);
					L = Aa(k && U || 0, L);
					e.path(J).attr({
								fill : {
									FCcolor : {
										gradientUnits : "userSpaceOnUse",
										cx : p,
										cy : n,
										r : f,
										color : s.join(),
										alpha : N,
										ratio : E,
										defaultColor : D.color,
										defaultAlpha : D.alpha,
										radialGradient : !0
									}
								},
								"stroke-width" : k,
								stroke : B
							}).add(this.group).shadow(d.shadow, void 0, {
								opacity : L / 100
							});
					E = K;
					N = T;
					J = M;
					L = R;
					s = z
				}
				if (!this.tickMarkGroup)
					this.tickMarkGroup = e.g("tickMark").add(this.group);
				if (!this.trendMarkerGroup)
					this.trendMarkerGroup = e.g("trendMarker").add(this.group);
				if (!this.pointGroup)
					this.pointGroup = e.g("point").translate(p, n)
							.add(this.group);
				e.circle(p, n, d.pivotRadius).attr({
							fill : {
								FCcolor : {
									color : d.pivotFillColor,
									alpha : d.pivotFillAlpha,
									ratio : d.pivotFillRatio,
									radialGradient : d.isRadialGradient,
									gradientUnits : "objectBoundingBox",
									angle : d.pivotFillAngle,
									cx : 0.5,
									cy : 0.5,
									r : "50%"
								}
							},
							"stroke-width" : d.pivotBorderThickness,
							stroke : d.pivotBorderColor
						}).add(this.group).shadow(d.shadow);
				for (var Q, S, d = Math.cos(89.99 * wa), g = -d, ga = function() {
					return {
						x : this.category,
						y : this.y,
						series : this.series,
						point : this,
						percentage : this.percentage,
						total : this.total || this.stackTotal
					}
				}, x = 0, v = b.length; x < v; x += 1) {
					Q = b[x];
					F = Q.isZone;
					o = r + (Q.startValue - c) / y * u;
					i = j(Q.radius, f);
					k = j(Q.innerRadius, F ? Math.max(h - 15, 0) : h);
					l = j(Q.trendValueDistance, 0);
					M = Math.cos(o);
					R = Math.sin(o);
					E = p + i * M;
					N = n + i * R;
					J = p + k * M;
					L = n + k * R;
					F
							? (F = r + (Q.endValue - c) / y * u, M = Math
									.cos(F), R = Math.sin(F), K = p + i * M, T = n
									+ i * R, M = p + k * M, R = n + k * R, O = (F = F > o
									? 1
									: 0) ? 0 : 1, B = Math.abs(s - z) > Math.PI
									? 1
									: 0, J = ["M", E, N].concat(e.getArcPath(p,
											n, E, N, K, T, i, i, F, B), ["L",
											M, R], e.getArcPath(p, n, M, R, J,
											L, k, k, O, B), ["Z"]), Q.graphic = e
									.path(J).attr({
										fill : G(Q.color, Q.alpha),
										"stroke-width" : Q.showBorder
												? Q.thickness
												: 0,
										stroke : Q.borderColor,
										dashstyle : Q.dashStyle
									}).add(this.trendPointGroup))
							: Q.graphic = e.path(["M", E, N, "L", J, L]).attr({
								"stroke-width" : Q.showBorder ? Q.thickness : 0,
								stroke : Q.borderColor,
								"stroke-linecap" : "round",
								dashstyle : Q.dashStyle
							}).add(this.tickMarkGroup);
					if (Q.useMarker)
						Q.markerElement = S = e.symbol("poly_3", E, N,
								Q.markerRadius, {
									startAngle : -o + Math.PI
								}).attr({
									fill : Q.markerColor,
									"stroke-width" : 1,
									stroke : Q.markerBorderColor
								}).add(this.trendMarkerGroup), Q.markerToolText !== ""
								&& function(b) {
									var c = {
										series : {},
										chart : a,
										id : Q.id,
										label : this.label,
										options : this.options,
										svgElm : this.svgElm,
										toolText : b,
										getLabelConfig : ga
									};
									S.on("mouseover", function(b) {
										var d = a.plotLeft, e = a.plotTop;
										c.tooltipPos = [
												m(b.layerX, b.x) - d + 20,
												m(b.layerY, b.y) - e - 15];
										a.tooltip.refresh(c)
									}).on("mouseout", function() {
												a.tooltip.hide()
											}).on("mousemove", function(b) {
										var d = a.plotLeft, e = a.plotTop;
										c.tooltipPos = [
												m(b.layerX, b.x) - d + 20,
												m(b.layerY, b.y) - e - 15];
										a.tooltip.refresh(c)
									})
								}(Q.markerToolText);
					if (Q.displayValue != "")
						N = (Q.endValue + Q.startValue) / 2, F = r + (N - c)
								/ y * u, M = Math.cos(F), R = Math.sin(F), Q.valueInside
								? (N = k - 2 - l, F = M > d ? ta : M < g
										? qa
										: za)
								: (N = i + 2 + l, F = M > d ? qa : M < g
										? ta
										: za), E = p + N * M, N = n + N * R, O = Q.style, O = j(
								parseInt(O.fontSize, 10), 10), K = O * 0.8, Q.textElement = e
								.text(Q.displayValue, E, N).attr({
											align : Q.align || F
										}).css(Q.style)
								.add(this.trendMarkerGroup), E = Q.textElement
								.getBBox(), E = E.height, N += M > d || M < g
								? O - E / 2 + E * 0.4 * R
										* (Q.valueInside ? -1 : 1)
								: Q.valueInside ? K - (R < 0 ? 0 : E * 0.9) : K
										- (R > 0 ? 0 : E * 0.9), Q.textElement
								.attr({
											y : N
										})
				}
			},
			drawTracker : function() {
				var a = this, c = a.chart, b = a.options, d = c.options.chart, e = c.options.scale, f = b.gaugeOriginX, h = b.gaugeOriginY, g, i = +new Date, k, l, o = (e.max - e.min)
						/ (d.gaugeEndAngle - d.gaugeStartAngle), p = function(a) {
					for (var b = {
						left : a.offsetLeft,
						top : a.offsetTop
					}, a = a.offsetParent; a;)
						b.left += a.offsetLeft, b.top += a.offsetTop, a !== la.body
								&& a !== la.documentElement
								&& (b.left -= a.scrollLeft, b.top -= a.scrollTop), a = a.offsetParent;
					return b
				}(a.chart.container), n = function(a, b, c) {
					return jb(b[1] - a.pageY + c.top, b[0] - a.pageX + c.left)
				}, q = {
					pageX : 0,
					pageY : 0
				}, m = function(b) {
					a.rotationStartAngle = n(Ba ? Qa(b) || q : b, [f, h], p);
					var c = a.chart && a.chart.options
							&& a.chart.options.instanceAPI
							&& a.chart.options.instanceAPI.chartInstance, d;
					if (a.chart.tooltip)
						if (b.type === "dragstart")
							a.chart.tooltip.block(!0), l = c.getDataJSON();
						else {
							(d = (c = a.chart
									&& a.chart.options
									&& a.chart.options.instanceAPI
									&& a.chart.options.instanceAPI.chartInstance)
									&& c.jsVars)
									&& (d._rtLastUpdatedData = c.getDataJSON());
							ha.raiseEvent("RealTimeUpdateComplete", {
										data : "&value=" + b.data.updatedValStr,
										prevData : l.values,
										source : "editMode",
										url : null
									}, c);
							try {
								window.FC_ChartUpdated
										&& window.FC_ChartUpdated(c.id)
							} catch (e) {
								setTimeout(function() {
											throw e;
										}, 1)
							}
							a.chart.tooltip.block(!1);
							a.chart.tooltip.refresh(b.data, !0)
						}
				}, r = function(b) {
					var c = b.data, b = n(Ba ? Qa(b) || q : b, [f, h], p), d = a.rotationStartAngle, d = b < 0
							&& d > 0 ? bb(b) - a.rotationStartAngle : b > 0
							&& d < 0
							? bb(a.rotationStartAngle) - b
							: a.rotationStartAngle - b, d = j(c.value, c.y) - d
							* o, g = [], i = 0, k = c.index;
					if (d < e.min)
						d = e.min;
					else if (d > e.max)
						d = e.max;
					for (; i < k; i += 1)
						g.push("");
					g.push(d);
					if (d !== c.value && a.realtimeUpdate({
								values : g
							}))
						c.updatedValStr = g.join("|"), a.rotationStartAngle = b
				};
				Ka(a.data, function(b) {
							g = b.trackerEventAdded;
							if (b.y !== null && !g && b.graphic) {
								if (b.link !== void 0 || b.editMode)
									var d = {
										cursor : "pointer",
										_cursor : "hand"
									};
								b.graphic.attr({
											isTracker : i
										}).on(Ba ? "touchstart" : "mouseover",
										function(d) {
											k = d.relatedTarget
													|| d.fromElement;
											if (c.hoverSeries !== a
													&& Ga(k, "isTracker") !== i)
												a.onMouseOver();
											b.onMouseOver()
										}).on("mouseout", function(b) {
									if (!a.options.stickyTracking
											&& (k = b.relatedTarget
													|| b.toElement, Ga(k,
													"isTracker") !== i))
										a.onMouseOut()
								}).css(d);
								b.trackerEventAdded = !0;
								b.editMode
										&& (Ra(b.graphic.element,
												"dragstart dragend", m, b), Ra(
												b.graphic.element, "drag", r, b))
							}
						})
			},
			drawTickMarks : function() {
				var a = this.chart, c = this.options, b = a.options.chart, d = a.options.scale, a = a.renderer, e = Number(c.gaugeOriginX), f = Number(c.gaugeOriginY), h = b.gaugeStartAngle, g = d.min, i = Number(c.gaugeInnerRadius), k = Number(c.gaugeOuterRadius), c = d.max
						- g, b = b.gaugeEndAngle - h, l = 0, j = d.majorTM, o = d.minorTM, n = this.tickMarkGroup, q, m, r, s, t, I, v = Math.cos, y = Math.sin, D = Number(d.minorTMHeight), u = Number(d.majorTMHeight), l = d.placeValuesInside;
				t = d.tickValueDistance;
				var z, J, R;
				d.placeTicksInside
						? (z = i, D = z + D, u = z + u)
						: (z = k, D = z - D, u = z - u);
				J = l ? i - t : k + t;
				if (!this.majorTM)
					this.majorTM = [];
				if (!this.tmLabel)
					this.tmLabel = [];
				l = 0;
				for (i = j.length; l < i; l += 1)
					k = j[l], q = k.value, t = k.displayValue, I = (q - g) * b
							/ c + h, R = v(I), I = y(I), q = e + z * R, m = f
							+ z * I, r = e + u * R, s = f + u * I, this.majorTM[l] = a
							.path(["M", q, m, "L", r, s]).attr({
										stroke : G(d.majorTMColor,
												d.majorTMAlpha),
										"stroke-width" : d.majorTMThickness,
										"stroke-linecap" : "round"
									}).add(n), t !== ""
							&& (r = l == 0 || l == i - 1
									? d.limitValues.style
									: d.tickValues.style, q = e + J * R
									+ (k.x || 0), m = f + J * I + (k.y || 0), this.tmLabel[l] = a
									.text(t, q, m).attr({
												align : k.align || "center"
											}).css(r).add(n));
				if (!this.minorTM)
					this.minorTM = [];
				l = 0;
				for (i = o.length; l < i; l += 1)
					q = o[l], I = (q - g) * b / c + h, q = e + z * v(I), m = f
							+ z * y(I), r = e + D * v(I), s = f + D * y(I), this.majorTM[l] = a
							.path(["M", q, m, "L", r, s]).attr({
										stroke : G(d.minorTMColor,
												d.minorTMAlpha),
										"stroke-width" : d.minorTMThickness,
										"stroke-linecap" : "round"
									}).add(n)
			},
			drawDataLabels : function() {
				var a = this.data, c = this.chart, b = this.options, d = this.dataLabelsGroup, e, f, h = c.renderer, g = b.dataLabels.style, i = b.pivotRadius, k = j(
						parseInt(g.lineHeight, 10), 12), l = b.valueBelowPivot, o = b.gaugeOriginX, p = b.gaugeOriginY
						+ (l ? k + i + 2 : -i - 2);
				if (!d)
					d = this.dataLabelsGroup = h.g("data-labels").attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : 6
							}).translate(c.plotLeft, c.plotTop).add();
				Ka(a, function(a) {
							if (a.displayValue !== E)
								f = a.valueY, e = j(a.valueX, o), T(f)
										|| (f = p, p += l ? k : -k), a.dataLabel = h
										.text(a.displayValue, e, f).attr({
													align : "center"
												}).css(g).add(d)
						})
			},
			realtimeUpdate : function(a, c) {
				var b = this.data, d = this.chart, e = d.options.scale, f = d.options.chart, h = 0, g = d.options.series
						&& d.options.series[0] && d.options.series[0].data, i = d.options.instanceAPI.numberFormatter, k = d.options.plotOptions.series.animation
						? a.interval
						: 0, l, j, o = f.gaugeStartAngle, n = e.min, e = e.max, q = e
						- n, r = f.gaugeEndAngle - o, s = a.values || [], t = a.labels
						|| [], I = a.showLabels || [], v = a.toolTexts || [], y = Math
						.min(s.length, b.length), D = !1;
				if (c) {
					if (f = b[c.index], j = i.getCleanValue(s[0]), f
							&& (j === null || j <= e && j >= n)) {
						if (j !== null)
							f.value = j, $(f.graphic).stop(!0, !0), f.graphic
									.animate({
												angle : (o + (j - n) / q * r)
														/ wa
											}, {
												duration : k
											}), D = !0;
						l = m(t[0], i.dataLabels(j));
						f.dataLabel && l !== void 0
								&& (I[0] == 0 && (l = ""), f.dataLabel.attr({
											text : l
										}), D = !0);
						l = m(v[0], g && g[c.index] && g[c.index].isLabelString
										&& g[c.index].toolText || void 0, i
										.dataLabels(j));
						if (l !== void 0)
							f.toolText = l, d.tooltip
									&& d.tooltip.refresh(f, !0), D = !0
					}
				} else
					for (; h < y; h += 1)
						if (f = b[h], j = i.getCleanValue(s[h]), f
								&& (j === null || j <= e && j >= n)) {
							if (j !== null)
								f.value = j, $(f.graphic).stop(!0, !0), f.graphic
										.animate({
													angle : (o + (j - n) / q
															* r)
															/ wa
												}, {
													duration : k
												}), D = !0;
							l = m(t[h], i.dataLabels(j));
							f.dataLabel
									&& l !== void 0
									&& (I[h] == h && (l = ""), f.dataLabel
											.attr({
														text : l
													}), D = !0);
							l = m(v[h], g && g[h] && g[h].isLabelString
											&& g[h].toolText || void 0, i
											.dataLabels(j));
							if (l !== void 0)
								f.toolText = l, d.tooltip
										&& d.tooltip.refresh(f, !0), D = !0
						}
				return D
			},
			render : function() {
				var d;
				var a, c = this.chart;
				a = c.renderer;
				var b = this.options;
				if (!this.group)
					d = this.group = a.g("series"), a = d, a.attr({
								visibility : this.visible ? ja : "hidden",
								zIndex : b.zIndex
							}).translate(c.plotLeft, c.plotTop)
							.add(c.seriesGroup);
				this.drawGraph();
				this.drawTickMarks();
				this.drawPoints();
				this.drawTracker();
				this.drawDataLabels();
				if (this.visible)
					c.currentSeriesIndex = this.index, c.naviigator
							&& placeNaviGator(c);
				this.options.animation && this.animate && this.animate();
				this.isDirty = !1
			},
			animate : function(a) {
				var c = this.data, b = this.chart.options.chart.gaugeStartAngle, d = 0, e, f = c
						&& c.length;
				if (!a) {
					for (; d < f; d += 1)
						e = c[d], e.y
								&& (a = e.graphic.attr("angle"), e.graphic
										.attr("angle", b / wa), e.graphic
										.animate({
													angle : a
												}, this.options.animation));
					this.animate = null
				}
			}
		});
		U.angulargauge = J
	}
})();
(function() {
	var ba = CnbiSoft(["private", "modules.renderer.highcharts-annotations"]);
	if (ba !== void 0) {
		var ua = ba.core, ca = ba.hcLib, Ia = ca.hasSVG, va = Math.min, ha = Math.max, B = Math.sin, E = Math.cos, ea = Math.PI, m = ea
				/ 180, u = ba.extend, j = ca.pluck, y = ca.pluckNumber, Oa = ca.graphics.convertColor, ra = ca.getDashStyle, V = ca.getValidValue, aa = ca.parseUnsafeString, fa = ca.setImageDisplayMode, da = ca.graphics.parseColor, Da = ca.setLineHeight, Ea = {
			style : {}
		}, K = function() {
			return this
		}, S = function(j, m) {
			var s;
			if (m > 360 || m < -360)
				m %= 360;
			if (j > 360 || j < -360)
				j %= 360;
			s = j - m;
			if (s > 360 || s < -360)
				s %= 360, m = j - s;
			m = 360 - m;
			j = 360 - j;
			if (j > 360 || m > 360)
				j -= 360, m -= 360;
			return {
				start : j,
				end : m,
				angle : -s
			}
		}, G = function(j, m, s, r) {
			var q = 0, t = 0, m = m == void 0 ? 1 : m, v;
			if (!j || !j.toString)
				return s;
			j = j.toLowerCase().replace(/\s/g, "");
			if (s = j.match(/^[\+\-]?\d+(\.\d+)?|[\+\-]\d+(\.\d+)?/g)) {
				for (v = 0; v < s.length; v += 1)
					q += Number(s[v]) || 0;
				q *= m
			}
			if (s = j.match(/^[\+\-]?(\$[a-z]+)|[\+\-](\$[a-z]+)/g))
				for (v = 0; v < s.length; v += 1)
					t += r[s[v]] || 0;
			if (s = j.match(/^[\+\-]?\$\d+(\.\d+)?|[\+\-]\$\d+(\.\d+)?/g))
				for (v = 0; v < s.length; v += 1)
					t = t + Number(s[v].replace("$", "")) || 0;
			return q + t
		}, ka = function(j) {
			var m = this.jsVars.annotationGroupsById;
			(j = m && m[j]) && j.wrapper && j.wrapper.show()
		}, Wa = function(j) {
			var m = this.jsVars.annotationGroupsById;
			(j = m && m[j]) && j.wrapper && j.wrapper.hide()
		}, oa, t;
		oa = function(j, m, s, r) {
			this.options = j;
			this.chart = s;
			this.attrs = {};
			this.css = {};
			this.bounds = {};
			this.annotations = [];
			this.shared = m;
			this.snaps = r || {};
			this.id = j.id || "";
			(s.annotations || (s.annotations = [])).push(this);
			this.scale()
		};
		u(oa.prototype, {
					scaleImageX : 1,
					scaleImageY : 1,
					scaleText : 1,
					scaleValue : 1,
					scaleValueComplement : 1,
					scaleX : 1,
					scaleY : 1
				});
		oa.prototype.scale = function() {
			var o = this.options, m = this.chart, s = this.shared, r = this.bounds, q = this.snaps, t = s.rootxscale, v = s.rootyscale, D = r.xs = y(
					o.xscale, s.xscale, 100)
					/ 100, u = r.ys = y(o.yscale, s.yscale, 100) / 100, J, B, E;
			this.scaleText *= u;
			this.scaleImageX *= D;
			this.scaleImageY *= u;
			if (j(o.autoscale, s.autoscale) != "0")
				D = y(o.origw, s.origw), u = y(o.origh, s.origh), D = m.chartWidth
						/ D, u = m.chartHeight / u, m = j(o.constrainedscale,
						s.constrainedscale) != "0", J = D < u ? D : u, B = m
						? J
						: D, E = m ? J : u, this.scaleValue *= J, this.scaleValueComplement *= m
						? J
						: D < u ? u : D, this.scaleX *= B, this.scaleY = this.scaleX
						* E, r.xs *= B, r.ys *= E, t *= B, v *= E, j(
						o.scaletext, s.scaletext) == "1"
						&& (this.scaleText *= E), j(o.scaleimages,
						s.scaleimages) == "1"
						&& (this.scaleImageX *= B, this.scaleImageY *= E);
			r.x = G(j(o.x, o.xpos), t, 0, q) + y(o.grpxshift, s.grpxshift, 0);
			r.y = G(j(o.y, o.ypos), v, 0, q) + y(o.grpyshift, s.grpyshift, 0);
			this.xshift = y(o.xshift, s.xshift, 0);
			this.yshift = y(o.yshift, s.yshift, 0)
		};
		oa.prototype.draw = function() {
			var o = this.chart, m = this.options, s = this.shared, r = this.bounds;
			this.wrapper = o.renderer.g("annotations").attr({
				x : 0,
				y : 0,
				zIndex : j(m.showbelow, m.showbelowchart, s.showbelow) != "0"
						? 0.5
						: 6,
				visibility : m.visible == "0" ? "hidden" : ""
			}).translate(r.x, r.y).add();
			if (m.items)
				for (s = 0; s < m.items.length; s += 1)
					(new t(o, m.items[s], this)).draw();
			return this
		};
		t = function(j, m, s) {
			this.chart = j;
			this.options = m;
			this.group = s;
			(s.annotations || (s.annotations = [])).push(this);
			this.args = [];
			this.attrs = {};
			this.style = {};
			this.bounds = {};
			this.type = m.type && m.type.toLowerCase && m.type.toLowerCase();
			this.scale();
			this.setup()
		};
		t.prototype.getAbsoluteBounds = function() {
			var j = this.bounds, m = j.x1, s = j.y1, r = j.x2, q = j.y2, t = va(
					m, r), v = va(s, q), m = ha(m, r) - t, s = ha(s, q) - v;
			return {
				x : t,
				width : m,
				y : v,
				height : s,
				r : j.r,
				unscaled : {
					width : m / j.xs,
					height : s / j.ys
				}
			}
		};
		t.prototype.scale = function() {
			var o = this.group, m = o.bounds, s = this.bounds, r = this.options, q = o.snaps, t = j(
					r.x, r.xpos), v = j(r.y, r.ypos), D = j(r.tox, r.toxpos), u = j(
					r.toy, r.toypos), B = s.xs = m.xs, m = s.ys = m.ys, E = y(
					r.xshift, o.xshift, 0), K = y(r.toyshuft, o.yshift, 0);
			this.hasDimensionY = this.hasDimensionX = this.hasDimension = !0;
			s.x1 = G(t, B, 0, q) + E;
			D === void 0
					? (this.hasDimensionX = this.hasDimension = !1, s.x2 = s.x1)
					: s.x2 = G(D, B, 0, q) + E;
			s.y1 = G(v, m, 0, q) + K;
			u === void 0
					? (this.hasDimensionY = this.hasDimension = !1, s.y2 = s.y1)
					: s.y2 = G(u, m, 0, q) + K;
			s.r = y(r.radius, 0) * o.scaleValue
		};
		t.prototype.setup = function() {
			var o = this.options, m = this.group, s = m.options, r = this.attrs, q = this.style, t = m.scaleValue, v = j(
					s.fillalpha, m.options.alpha, 100), u = this.fillAlpha = y(
					o.fillalpha, o.alpha, v), B = this.fillColor = j(
					o.fillcolor, o.color, s.color, "#ff0000"), J = this.fillPattern = j(
					o.fillpattern && o.fillpattern.toLowerCase
							&& o.fillpattern.toLowerCase(), s.fillpattern
							&& s.fillpattern.toLowerCase
							&& s.fillpattern.toLowerCase()), E = o.showborder
					? o.showborder == "1"
					: V(o.bordercolor), G = this.borderAlpha = y(o.borderalpha,
					o.alpha, s.borderalpha, v), v = this.dashed = o.dashed == "1";
			this.link = j(o.link, s.link);
			this.shadow = j(o.showshadow, s.showshadow) == "1";
			r.stroke = E ? Oa(j(o.bordercolor, B), G) : "none";
			r["stroke-linecap"] = "round";
			s = {
				FCcolor : {
					gradientUnits : "objectBoundingBox",
					color : B,
					alpha : u,
					ratio : j(o.fillratio, s.fillratio),
					angle : 360 - y(o.fillangle, 0),
					radialGradient : J === "radial"
				}
			};
			r.fill = s;
			r["stroke-width"] = E
					? y(o.borderthickness, o.thickness, 2) * t
					: 0;
			if (v)
				r.dashstyle = ra(o.dashlen * t, o.dashgap * t,
						r["stroke-width"]);
			if (this.link)
				q.cursor = "pointer", q._cursor = "hand";
			this.toolText = aa(j(o.tooltext, m.options.tooltext))
		};
		t.prototype.draw = function() {
			var j = this, m = j.chart, s = j.type, r = j.attrs, q, y, v, u, B, E = m.plotLeft, G = m.plotTop;
			if (s = t.types[s] && t.types[s].call && t.types[s].call(j)) {
				q = j.wrapper = m.renderer[s].apply(m.renderer, j.args).attr(r)
						.css(j.style).add(j.group.wrapper);
				j.shadow && (r = {
					opacity : ha(j.borderAlpha, r.fill.FCcolor.alpha) / 100
				}, q.shadow(r, void 0, r));
				s === "text" && q.textBound();
				if (j.link)
					q.on("click", function() {
								m.options.instanceAPI.linkClickFN.call(j)
							});
				if (j.toolText && (y = m.tooltip))
					v = {
						tooltipPos : [20, 20],
						series : {},
						svgElm : q.svgElm,
						point : j,
						getLabelConfig : K
					}, B = function() {
						y.refresh(v)
					}, q.on("mousemove", function(j) {
						v.tooltipPos[0] = (j.layerX || j.x) - E;
						v.tooltipPos[1] = (j.layerY || j.y) - G;
						u ? (u = clearTimeout(u), u = setTimeout(B, 150)) : (y
								.refresh(v), u = -2)
					}).on("mouseout", function() {
								u = clearTimeout(u);
								y.hide()
							})
			}
			return j
		};
		t.keys = {};
		t.textAlignOptions = {
			left : "left",
			right : "right",
			center : "center"
		};
		t.textVerticalAlignOptions = {
			top : "top",
			middle : "middle",
			bottom : "bottom"
		};
		t.textRotationOptions = {
			0 : "0",
			1 : "270",
			right : "90",
			left : "270"
		};
		t.types = {
			rectangle : function() {
				var j = this.args, m = this.getAbsoluteBounds(), s = m.width
						* 0.5;
				if (m.r > s)
					m.r = s;
				j[0] = m.x;
				j[1] = m.y;
				j[2] = m.width;
				j[3] = m.height;
				j[4] = m.r;
				return "rect"
			},
			line : function() {
				var j = this.options, m = this.group.scaleValue, s = this.attrs, r = this.bounds;
				this.args[0] = ["M", r.x1, r.y1, "L", r.x2, r.y2];
				s.stroke = Oa(this.fillColor, this.fillAlpha);
				s["stroke-width"] = y(j.thickness, 2) * m;
				return "path"
			},
			polygon : function() {
				var j = this.args, t = this.options, s = this.bounds;
				j[0] = "poly_" + y(t.sides, 5);
				j[1] = s.x1;
				j[2] = s.y1;
				j[3] = s.r;
				j[4] = {
					startAngle : y(t.startangle, 0) * m
				};
				return "symbol"
			},
			circle : function() {
				var o = this.args, t = this.attrs, s = this.options, r = this.bounds, q = this.chart.chartWidth, u = this.chart.chartHeight, v = this.group.scaleValueComplement, D = S(
						y(s.startangle, 0), y(s.endangle, 360)), G = r.r;
				if (!j(s.radius))
					r.r = q < u ? q * r.xs : u * r.ys, r.r = G = r.r * 0.3;
				s = y(s.yradius, G / v) * v;
				if (!this.fillPattern)
					t.fill.FCcolor.radialGradient = !0, this.fillPattern = "radial";
				if (this.fillPattern === "radial")
					t.fill.FCcolor.cx = t.fill.FCcolor.cy = 0.5;
				if (!(D.angle % 360) && G === s)
					return o[0] = r.x1, o[1] = r.y1, o[2] = r.r, "circle";
				D.angle % 360 || (D.start -= 0.0010);
				var t = this.chart.renderer.getArcPath, J = D.start * m, q = D.end
						* m, D = D.angle * m, u = r.x1, v = r.y1, r = u + E(J)
						* G, J = v + B(J) * s, K = u + E(q) * G, q = v + B(q)
						* s, G = t(u, v, r, J, K, q, G, s, 0, D >= ea ? 1 : 0);
				G.unshift("M", r, J);
				G.push("Z");
				o[0] = G;
				return "path"
			},
			arc : function() {
				var o = this.options, t = this.args, s = this.attrs, r = this.bounds, q = this.chart.chartWidth, u = this.chart.chartHeight, v = this.group.scaleValue, D = S(
						y(o.startangle, 0), y(o.endangle, 360)), B = D.start, G = D.end;
				if (!j(o.radius))
					r.r = q < u ? q * r.xs : u * r.ys, r.r *= 0.3;
				r.innerR = y(o.innerradius, r.r * 0.8 / v) * v;
				if (r.innerR > r.r)
					r.innerR += r.r, r.r = r.innerR - r.r, r.innerR -= r.r;
				!(D.angle % 360) && !Ia && (G += 0.5, B -= 0.5);
				if (!this.fillPattern)
					s.fill.FCcolor.radialGradient = !0, this.fillPattern = "radial";
				if (this.fillPattern === "radial")
					s.fill.FCcolor.cx = s.fill.FCcolor.cy = 0.5;
				t[0] = r.x1;
				t[1] = r.y1;
				t[2] = r.r;
				t[3] = r.innerR;
				t[5] = B * m;
				t[4] = G * m;
				return "arc"
			},
			text : function() {
				var m = this.chart, I = this.args, s = this.style, r = this.attrs, q = this.group, B = this.bounds, v = this.options, D = this
						.getAbsoluteBounds(), G = j(v.align,
						q.options.textalign, "center").toLowerCase(), E = j(
						v.valign, q.options.textvalign, "middle").toLowerCase(), K = aa(j(
						v.text, v.label)), S = this.chart
						&& this.chart.renderer
						&& this.chart.renderer.smartLabel, V = j(v.wrap,
						q.options.wraptext) == "1", U, ea, fa = j(v.rotatetext,
						q.options.rotatetext, "0").toLowerCase(), oa = t.textRotationOptions[fa], ba = oa != "0", fa = ba
						? "x"
						: "y", ba = ba ? "y" : "x", m = m.options.orphanStyles, ka = u(
						{}, m.defaultStyle.style || {}), ca = m[q.id
						.toLowerCase()]
						|| Ea, m = ca.style.color, ca = u(ka, ca.style), ha = parseFloat(ca.fontSize), ka = oa == "90"
						? -1
						: 1, ra = j(v.font, q.options.font, ca.fontFamily), q = y(
						v.fontsize, q.options.fontsize, ha)
						* q.scaleText;
				V
						&& (U = y(v.wrapwidth, this.hasDimensionX ? D.width
										/ B.xs : void 0), ea = y(v.wrapheight,
								this.hasDimensionY ? D.height / B.ys : void 0), U
								&& (U *= B.xs), ea && (ea *= B.ys));
				s.fontFamily = ra;
				s.fontWeight = j(v.bold, v.isbold) == "1" ? "bold" : "normal";
				if (j(v.italic, v.isitalic) == "1")
					s.fontStyle = "italic";
				if (v.bgcolor)
					s.backgroundColor = da(v.bgcolor);
				if (v.bordercolor)
					s.borderColor = da(v.bordercolor), s.border = "1px solid "
							+ s.borderColor;
				s.color = v.fontcolor ? r.fill = da(v.fontcolor) : da(m
						|| r.fill.FCcolor.color);
				s.fontSize = q + "px";
				q == ha ? s.lineHeight = ca.lineHeight : Da(s);
				r.align = t.textAlignOptions[G] || "center";
				r.rotation = parseInt(oa, 10);
				S.setStyle(s);
				s = S.getSmartText(K, U, ea, !1);
				switch (t.textVerticalAlignOptions[E] || "middle") {
					case "top" :
						D[fa] += (q - s.height) * ka;
						break;
					case "bottom" :
						D[fa] += q * ka;
						break;
					default :
						D[fa] += (q - s.height * 0.5) * ka
				}
				r.align === "left"
						? D[ba] += y(v.leftmargin, 0)
						: r.align === "center"
								&& (D[ba] += y(v.leftmargin, 0) * 0.5);
				I[0] = s.text;
				I[1] = D.x;
				I[2] = D.y;
				delete r.stroke;
				delete r["stroke-weight"];
				return "text"
			},
			image : function() {
				var m = this, t = m.chart, s = m.style, r = t.chartWidth, q = t.chartHeight, t = m.options, u = m.attrs, v = m.args, y = V(t.url), B = m.group.scaleImageX
						* j(Number(t.xscale), 100) / 100, G = m.group.scaleImageY
						* j(Number(t.yscale), 100) / 100, E = m
						.getAbsoluteBounds(), K = {
					width : 1,
					height : 1
				}, S;
				if (!y)
					return v[0] = E.x, v[1] = E.y, v[2] = E.width, v[3] = E.height, v[4] = E.r, "rect";
				S = new Image;
				S.onload = function() {
					K = fa("none", "top", "left", 100, 0, r, q, S);
					m.wrapper && m.wrapper.attr({
								width : (m.hasDimensionX
										? E.unscaled.width
										: K.width)
										* B,
								height : (m.hasDimensionY
										? E.unscaled.height
										: K.height)
										* G
							})
				};
				S.src = y;
				v[0] = y;
				v[1] = E.x;
				v[2] = E.y;
				v[3] = (m.hasDimensionX ? E.unscaled.width : K.width) * B;
				v[4] = (m.hasDimensionY ? E.unscaled.height : K.height) * G;
				s.opacity = ha(m.fillAlpha, m.borderAlpha) / 100;
				delete u.stroke;
				delete u.fill;
				delete u["stroke-linecap"];
				return "image"
			}
		};
		ca.Highcharts.Chart.prototype.callbacks.unshift(function(m, t) {
			var s = t.chartInstance, r = t.dataObj || {}, q = r.annotations, u, v, D = s.jsVars.annotationGroupsById = {};
			if (t.drawAnnotations && s.dataReady() && r.chart
					&& r.chart.showannotations != "0" && q && q.groups
					&& q.groups.length) {
				s = {
					showbelow : j(q.showbelow, q.showbelowchart),
					autoscale : q.autoscale,
					scaletext : q.scaletext,
					scaleimages : q.scaleimages,
					constrainedscale : q.constrainedscale,
					origw : j(q.origw, r.chart.origw, m.chartWidth),
					origh : j(q.origh, r.chart.origh, m.chartHeight),
					xshift : q.xshift,
					yshift : q.yshift,
					grpxshift : q.grpxshift,
					grpyshift : q.grpyshift,
					xscale : q.xscale,
					yscale : q.yscale,
					rootxscale : y(q.xscale, 100) / 100,
					rootyscale : y(q.yscale, 100) / 100
				};
				if (t.snapLiterals) {
					u = t.snapLiterals;
					r = {};
					for (v in u)
						r["$" + v] = r["+$" + v] = u[v], r["-$" + v] = u[v]
								* -1;
					u = r
				}
				for (r = 0; r < q.groups.length; r += 1)
					v = (new oa(q.groups[r], s, m, u)).draw(), v.id
							&& (D[v.id] = v)
			}
		});
		ua.addEventListener("rendered", function(j) {
					var j = j.sender, m = j.jsVars || {}, s = m.instanceAPI;
					if (!m.hcObj || !s || !s.drawAnnotations)
						delete j.showAnnotation, delete j.hideAnnotation;
					else {
						if (!j.showAnnotation)
							j.showAnnotation = j.ref.showAnnotation = ka;
						if (!j.hideAnnotation)
							j.hideAnnotation = j.ref.hideAnnotation = Wa
					}
				})
	}
})();
CnbiSoft(["private", "modules.renderer.highcharts-realtime", function() {
	var ba = this, ua = Math, ca = ua.random, Ia = ua.min, va = ba.hcLib.pluckNumber, ha, B, E;
	ha = function(B) {
		var m = B.sender, u = m.jsVars, B = m.__state, j = u.instanceAPI, y = j.dataObj, E = y
				&& y.alerts && y.alerts.alert || [], u = u._rtLastUpdatedData
				&& u._rtLastUpdatedData.values, ba = E.length, V;
		if (u && u.length) {
			y = function(j) {
				var u, y, B;
				for (B = 0; B < ba; B += 1)
					if (u = E[B], y = u.action && u.action.toLowerCase(), u.minvalue < j
							&& u.maxvalue > j) {
						if (!(u.occuronce === "1" && u.hasOccurred))
							switch (u.hasOccurred = !0, u.state = "1", y) {
								case "calljs" :
									setTimeout(function() {
												eval(u.param)
											}, 0);
									break;
								case "showannotation" :
									m.showAnnotation
											&& m.showAnnotation(u.param)
							}
					} else
						y === "showannotation" && u.state === "1"
								&& m.hideAnnotation
								&& m.hideAnnotation(u.param), u.state = "2"
			};
			if (j.multiValueGauge) {
				j = Ia(u.length, j.hcInstance && j.hcInstance.options
								&& j.hcInstance.options
								&& j.hcInstance.options.series
								&& j.hcInstance.options.series[0]
								&& j.hcInstance.options.series[0].data
								&& j.hcInstance.options.series[0].data.length
								|| 0);
				for (V = 0; V < j; V += 1)
					(!B.lastSetValues || u[V] !== B.lastSetValues[V])
							&& y(u[V])
			} else
				(!B.lastSetValues || u[0] !== B.lastSetValues[0]) && y(u[0]);
			B.lastSetValues = u
		}
	};
	B = function(B) {
		var B = B.sender, m = B.__state;
		B.jsVars && (B.jsVars._rtLastUpdatedData = null);
		m._toRealtime = clearTimeout(m._toRealtime);
		m._toClearChart = clearTimeout(m._toClearChart)
	};
	E = function(B, m, u) {
		clearTimeout(u);
		return setTimeout(B, m)
	};
	ba.addEventListener(["BeforeRender", "DataUpdated"], function(B) {
				B = B.sender;
				if (B.options.renderer === "javascript")
					B.__state.rtStateChanged = !0
			});
	ba.addEventListener("drawcomplete", function(ea) {
		var m = ea.sender;
		if (m.options.renderer === "javascript" || m.__state.rtStateChanged) {
			m.__state.rtStateChanged = !1;
			var u = m.jsVars.instanceAPI, j = u.hcInstance, y = m.__state, ua = m.jsVars, ra = j
					&& j.options && j.options.chart || {}, V = va(
					ra.updateInterval, ra.refreshInterval)
					* 1E3, aa = va(ra.clearInterval, 0) * 1E3, fa = u.drawingLatency, da = ra.dataStreamURL, Da = ra.dataStamp, ra = Boolean(u.realtimeEnabled
					&& V > 0 && da !== void 0 && j.options.chart), Ea = u.hcJSON
					&& u.hcJSON.plotOptions
					&& u.hcJSON.plotOptions.series.animation
					&& u.hcJSON.plotOptions.series.animation.duration || 0, K = y._rtAjaxObj, S = function() {
				m.clearChart && m.clearChart();
				if (aa)
					y._toClearChart = setTimeout(S, aa)
			}, G = function() {
				var j = da + (da.indexOf("?") === -1 ? "?num=" : "&num=")
						+ ca();
				Da && (j += "&dataStamp=" + Da);
				K.open && K.abort();
				K.get(j)
			};
			V <= 0 ? (y._toRealtime = clearTimeout(y._toRealtime), K
					&& K.abort()) : V < 10 && (fa >= 10 && (fa = 9), V = 10);
			y._toClearChart = clearTimeout(y._toClearChart);
			if (aa > 0)
				aa < 10 ? aa = 10 : y._toClearChart = setTimeout(S, aa);
			V -= fa;
			if (ra)
				y._rtPaused = !1, y._rtDataUrl = da, y.lastSetValues = null, K = y._rtAjaxObj
						|| (y._rtAjaxObj = new ba.ajax), K.onSuccess = function(
						B, E, K, t) {
					var K = u.linearDataParser
							&& u.linearDataParser(B, u.multisetRealtime), o = j.series
							&& j.series[0];
					if (m.isActive() && K && j
							&& (o && o.realtimeUpdate || u.realtimeUpdate)) {
						Da = K.dataStamp ? K.dataStamp : null;
						K.interval = V < 1E3 ? V : 1E3;
						E = m.getDataJSON();
						u.realtimeUpdate ? u.realtimeUpdate(K) : o
								.realtimeUpdate(K);
						ua._rtLastUpdatedData = u.multisetRealtime ? K : m
								.getDataJSON();
						ba.raiseEvent("RealTimeUpdateComplete", {
									data : B,
									prevData : E.values,
									source : "XmlHttpRequest",
									url : t,
									drawingLatency : u.drawingLatency
								}, ea.sender);
						try {
							window.FC_ChartUpdated
									&& window.FC_ChartUpdated(ea.sender.id)
						} catch (I) {
							setTimeout(function() {
										throw I;
									}, 1)
						}
						if (!y._rtPaused)
							y._toRealtime = setTimeout(G, V)
					} else
						y._toRealtime = clearTimeout(y._toRealtime)
				}, K.onError = function(j, u, B, t) {
					ba.raiseEvent("RealTimeUpdateError", {
								source : "XmlHttpRequest",
								url : t,
								xmlHttpRequestObject : u.xhr,
								error : j,
								httpStatus : u.xhr && u.xhr.status
										? u.xhr.status
										: -1
							}, ea.sender);
					y._toRealtime = m.isActive()
							? setTimeout(G, V)
							: clearTimeout(y._toRealtime)
				}, y._toRealtime = E(G, Ea > V ? Ea : V, y._toRealtime);
			m.addEventListener("beforedispose", function() {
						y._toRealtime = clearTimeout(y._toRealtime);
						y._toClearChart = clearTimeout(y._toClearChart)
					});
			m.removeEventListener(["beforedataupdate", "beforerender"], B);
			m.addEventListener(["beforedataupdate", "beforerender"], B);
			m.removeEventListener("RealTimeUpdateComplete", ha);
			u.dataObj && u.dataObj.alerts && u.dataObj.alerts
					&& u.dataObj.alerts.alert && u.dataObj.alerts.alert.length
					&& m.addEventListener("RealTimeUpdateComplete", ha)
		}
	})
}]);
